Benutzerdefiniertes Sortieren mit Excel ohne benutzerdefinierte Liste

Benutzerdefiniertes Sortieren mit Excel ohne benutzerdefinierte Liste

Ich möchte Excel-Zeilen sortieren können, in denen die Daten wie folgt aussehen:

Column - 1                 Other Columns

701-GBL-1843-MLMK          blah
566-JJB-2785-MYJW
254-WYD-3220-NAND
884-GLE-2843-FRYA

Und ich möchte die Daten nach dem dritten Parameter sortieren können, sodass ich nach den Zahlen in der Mitte der Zeichenfolge vergleiche, sodass das Ergebnis wie folgt aussieht:

701-GBL-1843-MLMK
566-JJB-2785-MYJW
884-GLE-2843-FRYA
254-WYD-3220-NAND

Gibt es eine Möglichkeit, dies zu tun, anstatt eine benutzerdefinierte Liste zu erstellen, die 100000000000000 Einträge lang sein wird?

Im Grunde möchte ich wissen, wie man Code für Excel schreibt, wo ich einen benutzerdefinierten Vergleich machen kann, der wie folgt aussieht

Pseudo:

mycompare(cell1, cell2):
    if(cell1's third param > cell2's third param):
        return GREATER
    if(cell1's third param < cell2's third param):
        return LESS
    return EQUAL

sort(myWorksheet, mycompare)

Es ist unnötig zu sagen, dass ich weder programmieren noch VB verwenden kann. Tut mir leid.

Antwort1

Erstellen Sie eine Hilfsspalte. Geben Sie in Zeile 2 dieser Spalte (vorausgesetzt, Zeile 1 hat Überschriften) die Formel ein

=MID(A2,9,4)

Dadurch wird der „dritte Parameter“ aus dem Wert in der ersten Spalte extrahiert. Anschließend wird nach der Hilfsspalte sortiert:

Sortieren nach Hilfsspalte

Antwort2

Mein Ansatz wäre, eine zusätzliche Datenspalte zu generieren. Vorausgesetzt, das Format Ihrer Werte in Spalte eins hat immer eine feste Länge wie in Ihrem Beispiel, würde ich verwenden, =MID(A2,9,4)um das dritte Element in eine separate Zelle zu extrahieren, damit Sie dann nach dieser Spalte sortieren können. Mein Formelbeispiel wählt das 4. Zeichen ab der 9. Zeichenposition aus, was für die gezeigten Datenbeispiele zu funktionieren scheint.

Wenn Sie eine Formel brauchen, die das dritte Element extrahiert, indem der zweite und dritte Bindestrich und die Zahl dazwischen ermittelt werden, ist das auch möglich. Ich muss nur ein bisschen damit herumspielen, um den kürzesten Ansatz zu finden, aber es ist problemlos möglich.

Antwort3

Ich weiß, dass Sie eine Antwort haben, aber da Sie gefragt haben, wie es mit VBa geht

Option Explicit

Sub Testing()

Start (False) ' large to small
Start (True) ' small to big

End Sub

Sub Start(fromSmallToBig As Boolean)

Dim myRow As Integer
myRow = 1

Do While (Range("A" & myRow).Value <> "")

    Dim currentValue As String
    currentValue = Range("A" & myRow).Value

    Dim nextValue As String
    nextValue = Range("A" & myRow + 1).Value

    If (nextValue = "") Then
    Exit Do
    End If

    Dim first() As String
    first = Split(currentValue, "-")

    Dim second() As String
    second = Split(nextValue, "-")


    If (fromSmallToBig) Then
        Call Sorting(first(2), second(2), myRow, nextValue, currentValue)
    Else
        Call Sorting(second(2), first(2), myRow, nextValue, currentValue)
    End If

    myRow = myRow + 1

Loop

End Sub

Sub Sorting(first As String, second As String, myRow As Integer, nextValue As String, currentValue As String)

      If first > second Then

        Dim rowOne() As Variant
        rowOne = Rows(myRow).Value

        Dim rowTwo() As Variant
        rowTwo = Rows(myRow + 1).Value

        Rows(myRow).Value = rowTwo
        Rows(myRow + 1).Value = rowOne

        myRow = 0 ' start all over again, not efficient but, simpler code

    End If

End Sub

Dies bedeutet auch, dass Sie keine zusätzlichen Spalten nur zum Sortieren benötigen, obwohl dies eigentlich keine gute Sache sein muss (Scotts Antwort ermöglicht es Ihnen, die Leistung von Excel zu nutzen, während meine VBa-Antwort ohne Schnickschnack auskommt und bei sehr großen Datenmengen möglicherweise nicht sehr effizient ist).

verwandte Informationen