1. Enter User-defined functions (see below) into Visual Basic Editor.
2. Insert additional column into your spreadsheet.
3. Enter =stufnr2zahl(A1) into new column (A1 refers to your column with
1.1, 1.10, you may even have 1.1.1.1, 1.1.1.2 etc.)
4. Sort spreadsheet due to new column.That's it.
5. If code is a miracle, learn German (to understand comments) or ask me.
Despite the fact that I tested my code, I cannot and I will not give any
warranty or any guarantee for its function, for its quality or for absence
of malfunction or absence of viruses. Remember: It's free
Kind regards,
Bernd Plumhoff
PS: Yes, this is a worksheet function newsgroup. I know - but: I could not
see an easy approach for the general solution without macros. And: You use
them as functions
------------------- Code below -------------------------------
Private Const delim As String = "."
Private Const basis As Double = 10000
Private Const logbasis As Long = 4
Public Function stufnr2zahl(stufnr As String) As Double
' stufnr2zahl wandelt den String stufnr in eine Double Zahl um.
' Beispiel: Bei gegebenem Trennzeichen "." und Basis 100 ist
stufnr2zahl("4.33.12.1") = 4,331201
' Mit dieser Hilfe kann nach den gegebenen Strings hierarchisch sortiert
werden.
Dim strtmp As String ' Hilfsvariable zur Untersuchung von stufnr
Dim delimlen As Integer ' Zur Ermittlung der Zahl rechts hinter dem jeweils
letzten Trennzeichen
stufnr2zahl = 0
strtmp = Trim(stufnr) ' Leerzeichen links und rechts weg
loop1:
' Wir gehen von rechts nach links durch stufnr durch und schieben die
erkannten Teilzahlen versetzt ins Ergebnis
delimlen = InStr(1, StrReverse(strtmp), delim, vbTextCompare) ' Position des
Trennzeichens von rechts gesehen?
If delimlen > 0 Then ' Trennzeichen gefunden
stufnr2zahl = stufnr2zahl / basis + Right(strtmp, delimlen - 1) ' Rechte
Teilzahl ins Ergebnis nehmen
strtmp = Left(strtmp, Len(strtmp) - delimlen) ' Rechte Teilzahl
herausnehmen
GoTo loop1 ' Weiter untersuchen
End If
stufnr2zahl = stufnr2zahl / basis + strtmp ' Restzahl ins Ergebnis nehmen
End Function
Public Function stufnr2normstr(stufnr As String) As String
' stufnr2normstr wandelt den String stufnr in einen String mit normierten
Hierarchiestufen um.
' Beispiel: Bei gegebenem Trennzeichen "." und logbasis 2 ist
stufnr2normstr("4.33.12.1") = "04331201"
' Mit dieser Hilfe kann nach den gegebenen Strings hierarchisch sortiert
werden.
Dim strtmp As String ' Hilfsvariable zur Untersuchung von stufnr
Dim delimlen As Integer ' Zur Ermittlung der Zahl rechts hinter dem jeweils
letzten Trennzeichen
stufnr2normstr = ""
strtmp = Trim(stufnr) ' Leerzeichen links und rechts weg
' Wir gehen von rechts nach links durch stufnr durch und schieben die
erkannten Teilzahlen versetzt ins Ergebnis
delimlen = InStr(1, StrReverse(strtmp), delim, vbTextCompare) ' Position des
Trennzeichens von rechts gesehen?
Do While delimlen > 0 ' Trennzeichen gefunden
stufnr2normstr = Format(Right(strtmp, delimlen - 1), String(logbasis,
"0")) & stufnr2normstr ' Rechte Teilzahl ins Ergebnis nehmen
strtmp = Left(strtmp, Len(strtmp) - delimlen) ' Rechte Teilzahl
herausnehmen
delimlen = InStr(1, StrReverse(strtmp), delim, vbTextCompare) ' Position
des Trennzeichens von rechts gesehen?
Loop
stufnr2normstr = Format(strtmp, String(logbasis, "0")) & stufnr2normstr '
Restzahl ins Ergebnis nehmen
End Function