CurrentRegion.Sort Alfanummeriek

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Avond allemaal.

Ik kom even terug op de Sort methode.

De .Sort methode die ik nu gebruik, sorteert het nummerieke deel in de waarde niet goed.

Het probleem ontstaat met User_1 en User_10. Deze worden onder elkaar geplaatst terwijl dit niet helemaal klopt.

De nu gebruikte code is

Code:
       Sheets(1).Cells(1).CurrentRegion.Sort Key1:=[A2], Header:=xlYes

In een eerder probleem was dit niet aan de orde. Echter nu helaas wel.

Een voorbeeld wordt aan gewerkt en zal morgen, indien niemand hier niets mee kan, in verband met drukte hopelijk geplaatst.

Voor zover bedankt.
 
Hallo,

Sorteren in een array.
Code:
Sub hsv()
Dim sn, arr, j As Long, jj As Long, xx As Long, xxx As Long, tmp, n As Long
sn = Sheets(1).Cells(1).CurrentRegion
For j = 2 To UBound(sn)
    For jj = j + 1 To UBound(sn)
        If Val(Split(sn(j, 1), "_")(1)) > Val(Split(sn(jj, 1), "_")(1)) Then
         tmp = Join(Application.Index(sn, jj, 0), "|")
               
            For xx = 1 To UBound(sn, 2)
               sn(jj, xx) = sn(j, xx)
            Next xx
           
            For xxx = 1 To UBound(sn, 2)
              sn(j, xxx) = Split(tmp, "|")(xxx - 1)
            Next xxx
         
        End If
    Next jj
Next j
Sheets("blad1").Cells(1).Resize(UBound(sn), UBound(sn, 2)) = sn
End Sub
 
HSV.

:eek: Ik zat al te denken aan een For functie met ook een Split functie, maar deze opzet had ik niet verwacht....

Ik ga deze morgen eens doorgronden. Voor nu teveel alcohol gezien... ;)





Alvast bedankt!!
 
Hoi,
En als je er zoiets van maakt?
Code:
Sheets(1).Cells(1).CurrentRegion.Sort Key1:=[A2],order1:=xlAscending, Header:=xlYes
 
@gast0660,

Als het zo eenvoudig was had ik die code niet geschreven. ;)
Wist je trouwens dat jouw code precies hetzelfde is als dat van @masala09?

Wat zou de standaardwaarde zijn van"xlsortorder" ?
 
Hoi Hsv,
Ik heb hier een eenvoudig dingetje lopen voor een dartsclub
met mijn stukje code erin
En volgend probleem doet zich niet voor
Het probleem ontstaat met User_1 en User_10. Deze worden onder elkaar geplaatst terwijl dit niet helemaal klopt.
Vandaar mijn suggestie,
 
Zie de verschillen in het bestandje.
 

Bijlagen

Waarom geen "user_01"
 
Dat is inderdaad het snelst en het simpelst om daar voor te kiezen. :)
 
Met een extra schrijfbeweging naar het blad. Maar zonder de hele array te doorlopen. Niet getest maar is waarschijnlijk sneller bij veel kolommen.

Code:
Sub VenA()
With Sheets(1).Cells(1).CurrentRegion
    ar = .Value
    For j = 2 To UBound(ar)
        ar(j, 1) = Val(Split(ar(j, 1), "_")(1))
    Next j
    .Value = ar
    .Sort [A1], , , , , , , 1
    ar = .Value
    For j = 2 To UBound(ar)
        ar(j, 1) = "User_" & ar(j, 1)
    Next j
    .Value = ar
End With
End Sub
 
@VenA,

Mooie oplossing.


Edit: het stond al voorgesorteerd zodat die van mij veel sneller leek,
maar bij ongesorteerd is die van jou zeker sneller.
 
Laatst bewerkt:
Hoewel niet helemaal verwacht gaat het zelfs bij een kleine dataset al stukken sneller. Even een voorbeeldje in elkaar gedraaid waaruit dit blijkt.
 

Bijlagen

gast0660. Bedankt, maar als het zo simpel had geweest dan had ik mijn vraag hier niet gesteld. No offence by the way.

Alphamax. Yep voorloopnullen. Dom dat ik daar even niet bij stil stond. Zo kun je dit inderdaad ook voorkomen. Heb mijn code gelaten wat het is en voorloopnullen toegevoegd op het werkblad. Resultaat is positief. Mijn dank.

HSV, jouw code gaat bij mij het archief in. Altijd makkelijk. Ook jij weer bedankt. Het voorbeeldbestand is zojuist de prullenbak in gegaan en dus niet meer nodig.

Case = Closed.

Edit: VenA. Ook jij bedankt. Was ik je toch bijna vergeten...:rolleyes: Ook jouw code gaat in het archief.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan