Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Excel sortieren von Text/Zahlen

393 views
Skip to first unread message

Marco

unread,
Sep 17, 2008, 10:06:08 AM9/17/08
to
Hi

Ich brauche Eure Hilfe mit dem Sortieren von Zahlen in Textfeldern mit
unterschiedlichem format!

Also ein Beispiel:

1
5.1
1.2
10.2.1
1.2.3
2
2.1.5
3
3.2.1.1
3.3.1.1.1

Und so sollte es sortiert werden:

1
1.2
1.2.3
2
2.1.5
3
3.2.1.1
3.3.1.1.1
5.1
10.2.1

Ich kann die ja nicht einfach zu Zahlen formatieren, weil dann aus 10.6.1
eine Zahl 37052 wird :-(
Wie könnte man das lösen? Geht das nur per VB?

Vielen Dank
Gruss Marco


Claus Busch

unread,
Sep 17, 2008, 11:44:50 AM9/17/08
to
Hallo Marco,

Am Wed, 17 Sep 2008 16:06:08 +0200 schrieb Marco:

> Ich brauche Eure Hilfe mit dem Sortieren von Zahlen in Textfeldern mit
> unterschiedlichem format!
>
> Also ein Beispiel:
>
> 1
> 5.1
> 1.2
> 10.2.1
> 1.2.3
> 2
> 2.1.5
> 3
> 3.2.1.1
> 3.3.1.1.1

das folgende Makro schreibt dir in die Zelle rechts daneben eine Zahl.
Du kannst dann nach dieser Hilfsspalte aufsteigend sortieren (Bereich
musst du noch anpassen und eventuell neben deinem Bereich eine neue
leere Spalte einfügen. Funktioniert auch nur für 5 Gliederungsebenen,
wie in deinem Beispiel.):
Sub Sortierspalte()

Dim rngZelle As Range
Dim intLänge As Integer
Dim i As Integer
Dim myarr As Variant

'Hier Bereich anpassen
For Each rngZelle In Range("A2:A11")
intLänge = Len(rngZelle) - Len(WorksheetFunction _
.Substitute(rngZelle, ".", ""))
Select Case intLänge
Case 0
rngZelle.Offset(0, 1) = rngZelle * 10 ^ 4
Case 1
ReDim myarr(intLänge)
myarr = Split(rngZelle, ".")
rngZelle.Offset(0, 1) = myarr(0) * 10 ^ 4 + myarr(1) * 10 ^
3
Case 2
ReDim myarr(intLänge)
myarr = Split(rngZelle, ".")
rngZelle.Offset(0, 1) = myarr(0) * 10 ^ 4 + myarr(1) * 10 ^ 3 _
+ myarr(2) * 10 ^ 2
Case 3
ReDim myarr(intLänge)
myarr = Split(rngZelle, ".")
rngZelle.Offset(0, 1) = myarr(0) * 10 ^ 4 + myarr(1) * 10 ^ 3 _
+ myarr(2) * 10 ^ 2 + myarr(3) * 10 ^ 1
Case 4
ReDim myarr(intLänge)
myarr = Split(rngZelle, ".")
rngZelle.Offset(0, 1) = myarr(0) * 10 ^ 4 + myarr(1) * 10 ^ 3 _
+ myarr(2) * 10 ^ 2 + myarr(3) * 10 ^ 1 + myarr(4)
End Select
Next

End Sub


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate

Marco

unread,
Sep 18, 2008, 2:52:00 AM9/18/08
to
Hallo Claus

Vielen Dank für die schnelle Hilfe!
Leider erhalte ich noch eine Fehlermeldung "Laufzeitfehler 13 Typen
unverträglich" und der VB Debuger markiert mir folgenden Bereich im Case 2:

rngZelle.Offset(0, 1) = myarr(0) * 10 ^ 4 + myarr(1) * 10 ^ 3 _
+ myarr(2) * 10 ^ 2

Er füllt die Spalte B aber trotzdem ab mit einer 5 stelligen Zahl, aber die
Sortierung stimmt auch mit Hilfe dieser Zahlen nicht, aber das wird wohl an
dem Formelfehler liegen, der die Funktion im Case 2 stoppt.

Gruss Marco


Marco

unread,
Sep 18, 2008, 3:08:48 AM9/18/08
to

"Marco" <n...@spam.com> schrieb im Newsbeitrag
news:%23uedOsV...@TK2MSFTNGP03.phx.gbl...

> Hallo Claus
>
> Vielen Dank für die schnelle Hilfe!
> Leider erhalte ich noch eine Fehlermeldung "Laufzeitfehler 13 Typen
> unverträglich" und der VB Debuger markiert mir folgenden Bereich im Case
> 2:

Ok, mein Fehler, da war ein Wert mit 6.6. erfasst, also noch ein Punkt ohne
folgende Zahl!
Wert gelöscht und nun läuft der Code durch :-)

Aber die Sortierreihen folge stimmt leider noch nicht.

Ich erhalte nun folgendes Resultat:

Ursprungswert - Sortierwert

1 - 10000
1.1 - 11000
1.2 - 12000
1.3 - 13000
2 - 20000
2.1 - 21000
2.2 - 22000
2.3 - 23000
3.6 - 36000
3.7 - 37000
3.7.1 - 37100
3.7.2 - 37200
3.7.2.1 - 37210
3.7.2.2 - 37220
3.7.2.3 - 37230
3.7.2.4 - 37240
3.7.2.5 - 37250
3.7.2.7 - 37270
3.7.2.8 - 37280
3.7.2.9 - 37290
3.7.3 - 37300

bis hier alles ok :-)

3.7.2.10 - 37300 <-- müsste weiter oben sein
3.7.2.11 - 37310 <-- müsste weiter oben sein
3.7.4 - 37400
3.7.5 - 37500
3.7.7 - 37700
3.7.8 - 37800
3.7.9 - 37900
3.8 - 38000
3.7.10 - 38000 <-- müsste weiter oben sein
3.8.1 - 38100

Hoffentlich kriegen wir das noch hin, das wäre Hammer wenn das funktionieren
würde :-)
Vielen Dank schon einmal für Deine Hilfe!

Gruss Marco


thomas...@gmail.com

unread,
Sep 18, 2008, 5:03:10 AM9/18/08
to
Grüezi Marco

On 18 Sep., 09:08, "Marco" <n...@spam.com> wrote:
>
> Aber die Sortierreihen folge stimmt leider noch nicht.
>

> Ursprungswert - Sortierwert
>
> 1 - 10000
> 1.1 - 11000
> 1.2 - 12000
> 1.3 - 13000
> 2 - 20000
> 2.1 - 21000
> 2.2 - 22000
> 2.3 - 23000
> 3.6 - 36000
> 3.7 - 37000
> 3.7.1 - 37100
> 3.7.2 - 37200
> 3.7.2.1 - 37210
> 3.7.2.2 - 37220
> 3.7.2.3 - 37230
> 3.7.2.4 - 37240
> 3.7.2.5 - 37250
> 3.7.2.7 - 37270
> 3.7.2.8 - 37280
> 3.7.2.9 - 37290
> 3.7.3 - 37300
>
> bis hier alles ok :-)

Du könntest das auch mit einer Funktion lösen, die dir einen Sort-
Index erstellt.
Die folgenden Zeilen tun dies für standarmässig 3-stellige Werte
zwischen den Punkten, bei Bedarf einfach den 3.Parameter anpassen:


Public Function Sort_Index(rngZelle As Range, strTrenner As String,
Optional intLen As Integer = 3) As String
Dim A As Variant
Dim intI As Integer
Dim strLen As String

For intI = 1 To intLen
strLen = strLen & "0"
Next intI

A = VBA.Split(rngZelle.Text, strTrenner)
For intI = 0 To UBound(A)
Sort_Index = Sort_Index & Format(A(intI), strLen)
Next intI
End Function

In der Zelle rufst Du die Funktion dann wie folgt auf:

=Sort_Index(A1;".")

oder für mehr Stellen:

=Sort_Index(A1;".";5)

Nach dieser Spalte kannst Du dann sortieren (lassen).

--
Mit freundlichen Grüssen

Thomas Ramel
- MVP für MS-Excel -

Marco

unread,
Sep 18, 2008, 8:42:39 AM9/18/08
to
<thomas...@gmail.com> schrieb im Newsbeitrag

Hi Thomas

Hurra, damit funktionert es einwandfrei :-)
Vielen Dank allen für die Hilfestellung!!!

Gruss Marco


0 new messages