HI Gast18414.
Als erstes würde man da eine Funktion benötigen, der beide Werte miteinander vergleichen kann und eine Aussage darüber trifft, ob der linke Wert gleich (0), kleiner (-1) oder größer (1) dem rechten Wert ist.
Public Function ValueCompare(LeftValue As String, RightValue As String) As Long
' Logic for LeftValue -> RightValue must return equal (0), lesserThan (-1) or greaterThan (1)
End Sub
Die Logik kann beliebig implementiert werden. In deinem Fall wäre es zum Beispiel notwendig, zuerst den vorderen nicht-numerischen Teil zu ermitteln und mittels VBA-Standard StrComp-Funktion [microsoft.com] zu vergleichen. Wenn der vordere Teil gleich ist, vergleicht man den hinteren Teil, also den numerischen, und dieser liefert das Ergebnis. Ist der vordere Teil ungleich, dann ist das Ergebnis der StrComp-Funktion bereits der Ergebnis der Funktion und du musst den hinteren Teil nicht vergleichen.
Damit kann man dann folgendes tun:
- starte in der ersten Zeile in der Tabelle
- vergleiche beide Werte der Zeile miteinander -> ValueCompare( <LeftValue>, <RightValue> )
- wenn -1: schiebe die Zelle von RightValue eins nach unten (mittels Range.Insert() Methode)
- wenn 1: schiebe die Zelle vom LeftValue eins nach unten (mittels Range.Insert() Methode)
- sonst: tue nichts
- gehe in die nächste Zeile (nach unten)
- wiederhole ab Punkt 2. - soalnge bis keine Zeile mehr übrig ist
=> Das Ergebnis dieses Algorithmus sollte die zweite Tabelle sein.
Grüße
PS: Als Schleifentyp wird man eine Do...Loop-Anweisung [microsoft.com] benötigen.
PPS: https://www.vba-tutorial.de/
|