Microsoft Excel

Herbers Excel/VBA-Archiv

Zahlen im String sortieren

Betrifft: Zahlen im String sortieren von: , ohne dass stormlamp
Geschrieben am: 04.08.2014 12:22:05

Hallo Zusammen,

bei einer bereits gelösten Aufgabenstellung von heute, möchte ich gerne ein weiteres Makro einsetzen:

In einer Spalte habe ich Abmesseungen stehen im Format (Beispiel):

500x300x200

Nun sind die Zahlen in diesem String nicht in jeder Zeile der Spalte in der richtigen Reihenfolge (Größte, Mittlere, Kleinste) sortiert, sondern ab und zu auch bspw.
300x200x500

Bisher mache ich das "zu Fuß" über die Funktion Text in Spalten mit Trennzeichen "x" und anschließend wieder zusammensetzen mit
=Max(V1:V3)&"x"&kkleinste(V1:V3;2)&"x"&Min(V1:V3)

Mir würde ein Makro sehr helfen, dass in der Spalte, in der der Curosr steht, alle Strings durch den String mit der richtigen Reihenfolge ersetzt, ohne dass ich erst neue Hilfsspalten erzeugen muss.

Mit freundlichen Grüßen
Hans

  

Betrifft: AW: Zahlen im String sortieren von: Daniel
Geschrieben am: 04.08.2014 12:48:20

Hi

probier mal das:

Sub Test()
Dim arr
Dim rng
Dim z As Long, s As Long
Dim TT1() As String
Dim TT2(0 To 2) As Double
Dim i As Long

Set rng = Intersect(Selection.EntireColumn, Selection.Worksheet.UsedRange)
arr = rng.Value

For z = 1 To UBound(arr, 1)
    For s = 1 To UBound(arr, 2)
        If arr(z, s) Like "*x*x*" Then
            TT1 = Split(arr(z, s), "x")
            For i = 0 To 2
                TT2(i) = CDbl(TT1(i))
            Next
            For i = 0 To 2
                If TT2(i) = WorksheetFunction.Max(TT2) Then
                    TT1(0) = CStr(TT2(i))
                ElseIf TT2(i) = WorksheetFunction.Min(TT2) Then
                    TT1(2) = CStr(TT2(i))
                Else
                    TT1(1) = CStr(TT2(i))
                End If
            Next
            arr(z, s) = Join(TT1, "x")
        End If
    Next s
Next z

rng.Value = arr
End Sub
Gruß Daniel


  

Betrifft: AW: Zahlen im String sortieren von: stormlamp
Geschrieben am: 04.08.2014 13:26:48

Hallo Daniel,

danke sehr - perfekt und so schnell, das man auch bei 1000 Zeilen glaubt es wäre erst gar nicht gestartet.

Mit freundlichen Grüßen
Hans


  

Betrifft: AW: Zahlen im String sortieren von: stormlamp
Geschrieben am: 04.08.2014 13:42:43

Hallo Daniel,

doch noch ein kleines Problem, wenn bspw. in einer Zeile der String "940x440x45Ø8" steht, läuft die Routine in den Debugger.

Zeilen, die Fehler erzeugen sollten übersprungen werden bzw. noch besser dann als Ergebnis "ungültig 940x440x45Ø8" enthalten. Geht das auch?

Mit freundlichen Grüßen
Hans


  

Betrifft: AW: Zahlen im String sortieren von: Daniel
Geschrieben am: 04.08.2014 13:54:50

das war jetzt nicht Teil der Beschreibung.
ob ein Text einer Zahl entspricht, kannst du mit "IF IsNumeric(TT1(i)) prüfen.
Gruß Daniel


  

Betrifft: AW: Zahlen im String sortieren von: Daniel
Geschrieben am: 04.08.2014 14:08:13

Hi
probiers mal so, Zeilen mit Text drin (dh auch die Durchmesserzeilen) werden dann übersprungen:

Sub Test()
Dim arr
Dim rng
Dim z As Long, s As Long
Dim TT1() As String
Dim TT2(0 To 2) As Double
Dim i As Long

Set rng = Intersect(Selection.EntireColumn, Selection.Worksheet.UsedRange)
arr = rng.Value

For z = 1 To UBound(arr, 1)
    For s = 1 To UBound(arr, 2)
        If arr(z, s) Like "*x*x*" Then
            TT1 = Split(arr(z, s), "x")
            For i = 0 To 2
                IF IsNumeric(TT2(i)) then
                    TT2(i) = CDbl(TT1(i))
                else
                    exit For
                end if
            Next
            
            If i = 3 Then
            For i = 0 To 2
                If TT2(i) = WorksheetFunction.Max(TT2) Then
                    TT1(0) = CStr(TT2(i))
                ElseIf TT2(i) = WorksheetFunction.Min(TT2) Then
                    TT1(2) = CStr(TT2(i))
                Else
                    TT1(1) = CStr(TT2(i))
                End If
            Next
            arr(z, s) = Join(TT1, "x")
            End If
            
        End If
    Next s
Next z

rng.Value = arr
End Sub



  

Betrifft: AW: Zahlen im String sortieren von: stormlamp
Geschrieben am: 04.08.2014 14:24:05

Hallo Daniel,

einige Einträge, wie bspw. "Ø13,8x2614x1,5" laufen leider immer noch in den Debugger und werden nicht übersprungen.

Gruß
Hans


  

Betrifft: AW: Zahlen im String sortieren von: Daniel
Geschrieben am: 04.08.2014 14:32:44

Sorry, Tippfehler:
muss heißen: IF IsNumeric(TT1(i)) then
da du mir keine Beipspieldatei zum Testen zur verfügung gestellt hast, musst du jetzt die Fehlertests selber machen.
Gruß Daniel


  

Betrifft: AW: Zahlen im String sortieren von: stormlamp
Geschrieben am: 04.08.2014 14:50:54

Hallo Daniel,

herzlichen Dank, jetzt funktioniert es.

Die Datei, die ich bearbeite hat ca. 70.000 Zeilen (43MB) und da die Benutzer bei den Eingaben alle Fehler gemacht haben, die man sich vorstellen kann, hätte auch ein Auszug nicht geholfen.

Aber jetzt bin ich dank Deiner Hilfe einen großen Schritt weiter gekamm.

Gruß
Hans


  

Betrifft: AW: Zahlen im String sortieren von: Daniel
Geschrieben am: 04.08.2014 15:01:19

naja, ein Auszug mit den gängigen Fehlern würde da schon helfen.
du musst die Beispieldatei halt gezielt aus korrekten Werten und möglichen Fehlern erstellen (am besten auch so kennzeichnen).
Dann weiss man, worauf man den Code anpassen muss.

Gruß Daniel


 

Beiträge aus den Excel-Beispielen zum Thema "Zahlen im String sortieren"