• 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

Status
Niet open voor verdere reacties.

Hasto1

Nieuwe gebruiker
Lid geworden
28 feb 2020
Berichten
2
Wie kan mij helpen met het sorteren van 2 rijen: zoals

A1 300
A3 500
B1 400
B5 600
B6 500

Dit is maar een klein deel van de lijst. Het is echter de bedoeling om als volgt te selecteren
A3 500
A1 300
B5 600
B6 500
B1 400

Dus eerst de alle A-tjes maar dan met het hoogste getal als eerste

Is er iemand die hier een oplossing voor heeft? Alvast bedankt
 
Met een macrootje.
Code:
Sub hsv()
Dim sv, i As Long, s0 As String
    sv = Cells(1).CurrentRegion
    For i = 2 To UBound(sv)
        s0 = s0 & Left(sv(i, 1), 1) & "|"
    Next i
       Columns(1).Insert
       Cells(2, 1).Resize(UBound(sv) - 1) = Application.Transpose(Split(s0, "|"))
       Cells(1).CurrentRegion.Sort [a1], , [c1], , 2, , , 1
       Columns(1).Delete
End Sub

Of de sorteermethode binnen een array.
Code:
Sub hsv_2()
Dim sv, a, i As Long, j As Long, tmp
sv = Cells(1).CurrentRegion
ReDim a(UBound(sv), 2)
 For i = 1 To UBound(sv)
   a(i - 1, 0) = Left(sv(i, 1), 1)
   a(i - 1, 1) = sv(i, 1)
   a(i - 1, 2) = sv(i, 2)
 Next i
 For i = 1 To UBound(a) - 1
    For j = i + 1 To UBound(a) - 1
       If a(i, 0) >= a(j, 0) Then
         If a(i, 0) > a(j, 0) Or CLng(a(i, 2)) <= CLng(a(j, 2)) Then
            tmp = a(j, 0) & "|" & a(j, 1) & "|" & a(j, 2) & "|"
            a(j, 0) = a(i, 0)
            a(j, 1) = a(i, 1)
            a(j, 2) = a(i, 2)
            a(i, 0) = Split(tmp, "|")(0)
            a(i, 1) = Split(tmp, "|")(1)
            a(i, 2) = Split(tmp, "|")(2)
          End If
      End If
    Next j
  Next i
   For i = 0 To UBound(a)
      a(i, 0) = a(i, 1)
      a(i, 1) = a(i, 2)
    Next i
 Cells(1).Resize(UBound(sv), 2) = a
End Sub
 
Als een macro te ingewikkeld is kan je een hulpkolom gebruiken waarin je zelf een sorteersleutel samenstelt.

Bv iets van
Code:
=CODE(A2)&TEXT(10000-B2;"00000")&TEXT(100-MID(A2;2;10);"000")
 
=Links(b2;1) lijkt mij al voldoende precies wat de macro doet.
 
Wat weet je het toch allemaal goed @HSV. Er staat niet voor niets 'Bv iets van'
 
Van fouten kun je leren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan