• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

sorteren velden

Status
Niet open voor verdere reacties.

brunniepoo

Gebruiker
Lid geworden
25 sep 2006
Berichten
100
Ik heb een kolom met waarden die steeds als volgt zijn opgebouw: AAA-1980-13-01, waarbij er dus drie variabelen zijn, alleen de letters zijn constant.

Bij sorteren wordt gesorteerd op jaar, een vervolgsortering op nummer (de 13) gaat echter mis, excel vindt namelijk dat een volgorde

AAA-1978-10-01
AAA-1978-1-01
AAA-1978-13-01
AAA-1978-2-01

acceptabel is. Ik niet.

De kolom waar het in staat kan ik vervolgens wel opsplitsen, per kolom sorteren en weer samenvoegen. Het probleem is echter dat deze gegevens omgezet moeten worden naar een rij (via een script dat ik zelf niet begrijp :) ) en dat sorteren dan niet meer goed gaat.

Het heeft schijnbaar iets met de opmaak te maken maar het lukt me niet om dit goed te krijgen, wie helpt?
 

Bijlagen

Laatst bewerkt:
Hang eens een voorbeeldje aan?
DAn wordt het wat overzichtelijker wat je precies wilt.

Groet,
Ferenc
 
Beste brunniepoo,

Excel ziet jouw invoer als tekst. Terwijl jij getallen ziet. Als het mogelijk is te sorteren zoals jij wilt, dan zal het via VBA moeten. Maar ik zou niet weten hoe.

Richard
 
zie nu ook dat horizontaal sorteren de nodige problemen geeft. Excel ziet verbanden tussen cellen terwijl die er niet zijn; hij zou bij het horizontaal sorteren elke rij afzonderlijk moeten sorteren ipv vast te houden aan de kolommen (dus altijd links beginnen en geen lege cellen ertussen; copy-paste special werkt daarna blijkbaar niet meer omdat excel wel inhoud wenst te zien in de 'lege cellen'...)


Is dit in te stellen?
 
Ik heb naar je bestandje gekeken, maar ik word er niet veel wijzer uit. Wat wil je eigenlijk bereiken?

En wat met die lege cellen?

Wigi
 
Lege cellen zijn het gevolg van het horizontaal sorteren, zouden dus weg moeten.

Wat ik gedaan heb is, het volgende: twee kolommen via een stukje VBA dat ik van dit forum haalde omzetten naar rijen, met achter elke waarde uit de linkerkolom alle waarden uit de rechterkolom die hiermee correspondeerden.
Dit ging bijna goed, alleen de sortering was niet in orde, moet namelijk van laag naar hoog, dus BPN-1872-9-01, BPN-1872-10-01, BPN-1873-5-01 en zo verder.

De rijen hebben geen verband met elkaar, elke rij staat uiteindelijk voor een etiket dat ik nodig heb en waar alle waarden vanaf de tweede kolom in moeten, op volgorde.

Duidelijker? (heb ook een tweede bestandje bijgevoegd met de situatie voor de conversie, incl. de macro die ik gebruikt heb)
 

Bijlagen

Iemand die weet of wat ik nodig heb überhaupt te doen is in excel of kan dit alleen met VBA? Ben er nu al weer uren mee bezig zonder resultaat en zou me liever die moeite besparen als het toch nooit wat kan opleveren...
 
Iemand die weet of wat ik nodig heb überhaupt te doen is in excel of kan dit alleen met VBA? Ben er nu al weer uren mee bezig zonder resultaat en zou me liever die moeite besparen als het toch nooit wat kan opleveren...

Als ik het wist, had ik het ja al wel verteld... Vanavond kijk ik er opnieuw naar, hopelijk met succes voor jou.

Wigi
 
Laatst bewerkt:
Vanavond kijk er (opnieuw) naar, hopelijk met succes voor jou.

Ik heb het dan toch na nogal wat werk kunnen klaar spelen voor jou.

Hier is het.

Code:
Sub sortering()
    Range("B1", Range("B1").End(xlDown)).TextToColumns Destination:=Range("C1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Other:=True, OtherChar:="-", _
        FieldInfo:=Array(Array(1, 2), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True
    Range("A1").CurrentRegion.Sort Key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("E1"), Order2:=xlAscending, _
        Key3:=Range("F1"), Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False
    Range("C1", Range("C1").End(xlDown).End(xlToRight)).ClearContents
End Sub

Wigi
 
als ik deze macro draai op het werkblad waar reeds rijsortering heeft plaatsgevonden (zoals in voorbeeld 1), dan krijg ik twee kolommen, namelijk de eerste twee kolommen van voorbeeld 1, gesorteerd op kolom 2 (ipv kolom 1).
De sortering is nu overigens beter dan als ik de oude kolom (van voor het draaien van de macro) sorteer, hij herkent nu wel dat 6 voor 11 komt e.d.

Er gaat echter kennelijk toch iets fout, ten eerste is de waarde in kolom 2 niet de laagste waarde uit de rij, ten tweede worden de waardes in kolommen 3 en hoger verwijderd.
De sortering van kolommen is overigens niet nodig, hier doe ik niets mee.

Ter voorbeeld een bestandje met links de twee kolommen die het resultaat zijn van jouw macro, rechts de twee kolommen die uitkomst zijn van het sorteren van de eerste twee kolommen van het 'oude' werkblad.

Moet ik iets veranderen of staat er mogelijk een foutje in de macro (kolomsortering ipv rijsortering oid)?
 

Bijlagen

Laatst bewerkt:
als ik deze macro draai op het werkblad waar reeds rijsortering heeft plaatsgevonden (zoals in voorbeeld 1), dan krijg ik twee kolommen, namelijk de eerste twee kolommen van voorbeeld 1, gesorteerd op kolom 2 (ipv kolom 1).
De sortering is nu overigens beter dan als ik de oude kolom (van voor het draaien van de macro) sorteer, hij herkent nu wel dat 6 voor 11 komt e.d.

Er gaat echter kennelijk toch iets fout, ten eerste is de waarde in kolom 2 niet de laagste waarde uit de rij, ten tweede worden de waardes in kolommen 3 en hoger verwijderd.
De sortering van kolommen is overigens niet nodig, hier doe ik niets mee.

Ter voorbeeld een bestandje met links de twee kolommen die het resultaat zijn van jouw macro, rechts de twee kolommen die uitkomst zijn van het sorteren van de eerste twee kolommen van het 'oude' werkblad.

Moet ik iets veranderen of staat er mogelijk een foutje in de macro (kolomsortering ipv rijsortering oid)?

De macro werkt voor het tweede voorbeeld. Waarom post je dat anders?
 
zoals ik schreef: om de situatie voor de conversie te laten zien, dus wat het was voordat ik er rijen van maakte. Sorry dat dat niet duidelijker was (ik zie nu idd dat alles wel voor misverstand vatbaar was).
 
Laatst bewerkt:
zoals ik schreef: om de situatie voor de conversie te laten zien, dus wat het was voordat ik er rijen van maakte. Sorry dat dat niet duidelijker was (ik zie nu idd dat alles wel voor misverstand vatbaar was).

OK. Ik zal direct nog naar het eerste bestand kijken. Blijf online om eventuele vragen te beantwoorden.

Wigi
 
Brunniepoo

ik heb het eerste bestand geopend.

Wat precies moet er veranderd worden? aub in heel simpele woorden uitleggen. Gebruik de bereiken en de jaren zoals in het eerste bestand om te zeggen naar waar die moeten komen.

Wat is dat met die kolommen die naar rijen moeten? En wat moet er gesorteerd worden?

Wigi
 
in eerste bestand zijn kolommen al rijen geworden (kolommen stond in voorbeeld2 namelijk) en is er horizontaal gesorteerd (vandaar de gaten)

élke rij moet gesorteerd worden vanaf de tweede kolom (de eerste kolom moet blijven bestaan)
bij rijensortering van excel gaat het fout vanwege de opmaak, 15 komt voor 6 enzovoort (vgl J1,K1)
gehele sheet uiteraard links uitlijnen zonder gaten tussen twee cellen binnen een rij

in jouw module ging dat tweede punt in ieder geval al goed, de sortering was juist

Bereik is dus B1:N38 in dit voorbeeld.

Ik weet niet wat het handigste startpunt is:
- de oorspr. kolommen (voorbeel 1)
- de conversie naar rijen (voorbeeld 1 plus macro)
- de gersorteerde rijen (voorbeeld 2)

Zo duidelijk?
 
Dit is duidelijker ja.

Heb je ooit meer dan kolom N nodig? Of is dat het maximum aantal kolommen dat je gebruikt?
 
Test deze code eens uit op EEN KOPIE VAN je bestand tot en met kolom AL.

Code:
Sub sortering()
    Dim l As Long, lngRow As Long, firstRow As Long
    
    Application.ScreenUpdating = False
    lngRow = Range("A" & Rows.Count).End(xlUp).Row
    
    For l = 1 To lngRow
        Range("B" & l, Cells(l, Columns.Count).End(xlToLeft)).Copy
        Range("B" & lngRow + 10).PasteSpecial Paste:=xlPasteValues, Transpose:=True
        Range("B" & l, Cells(l, Columns.Count).End(xlToLeft)).ClearContents
        
        Range("B" & lngRow + 10, Range("B" & Rows.Count).End(xlUp)).TextToColumns Destination:=Range("C" & lngRow + 10), _
            DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Other:=True, _
            OtherChar:="-", FieldInfo:=Array(Array(1, 2), Array(2, 1), Array(3, 1), Array(4, 1)), _
            TrailingMinusNumbers:=True
        
        firstRow = Range("B" & lngRow).End(xlDown).Row
        Range("B" & firstRow, Range("F" & Rows.Count).End(xlUp)).Sort Key1:=Range("D" & firstRow), Order1:=xlAscending, _
            Key2:=Range("E" & firstRow), Order2:=xlAscending, Key3:=Range("F" & firstRow), Order3:=xlAscending, _
            Header:=xlGuess, OrderCustom:=1, MatchCase:=False
        
        Range("C" & firstRow, Range("F" & Rows.Count).End(xlUp)).ClearContents
        
        Range("B" & firstRow, Range("B" & Rows.Count).End(xlUp)).Copy
        Range("B" & l).PasteSpecial Paste:=xlPasteValues, Transpose:=True
        Range("B" & firstRow, Range("B" & Rows.Count).End(xlUp)).ClearContents
    Next
    
    Application.CutCopyMode = False
    Range("A1").Select
    Application.ScreenUpdating = True
    MsgBox "Klaar!"
End Sub

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan