Sortierzeilen: 6 Transaktionen mit Datums- und Aktionsinformationen zusammengefasst

Sortierzeilen: 6 Transaktionen mit Datums- und Aktionsinformationen zusammengefasst

Ich muss Transaktionsinformationen in einer Tabelle nach aufsteigendem Datum sortieren. Jede Zeile steht für eine einzelne Person und die letzten 6 Transaktionen in ihrem Verlauf. Das Problem ist, dass die Datenbank zwar die letzten 6 Transaktionen ausspuckt, dies jedoch nicht in der richtigen Reihenfolge tut, sodass ich dies manuell in Excel tun muss.

Das Transaktionsdatum und das Ablaufdatum müssen mit den Daten „Ist Geschenk“ und „Aktion“ verknüpft bleiben. Daher funktioniert die Verwendung von Zeilensortierfunktionen für diese Anwendung nicht. Diese vier Spalten müssen als Gruppe zusammengehalten werden.

Im beigefügten Screenshot habe ich Farben verwendet, um zu zeigen, wie Spalten gruppiert bleiben müssen, und die Transaktion rot hervorgehoben, die zuerst hätte kommen MÜSSEN, wenn die Daten in der richtigen Reihenfolge wären. Hoffentlich gibt dies einen klareren Hinweis auf das Problem („Erste“ sind für jede Person in unterschiedlichen Spalten) und was mein Ziel ist (dass jede Spaltengruppe in aufsteigender Datumsreihenfolge nach Zeilen sortiert wird).

Screenshot mit Notizen

Antwort1

Probieren Sie diesen Code aus. Fügen Sie ihn in das VB-Editor-Fenster ein und führen Sie ihn aus (googlen Sie „Wie führe ich VBA-Code aus?“, um weitere Hilfe zu erhalten). Das ist zwar nicht besonders effizient, sollte aber funktionieren.

Sub Some_Sorting_Procedure()
    Dim r As Long, last_row As Long
    Dim i As Long, j As Long
    Dim arr As Variant

    Application.ScreenUpdating = False

    With ActiveSheet
        last_row = .Cells(.Rows.Count, 1).End(xlUp).Row
        For r = 2 To last_row
            For i = 3 To 23 Step 4
                For j = i + 4 To 23 Step 4
                    If .Cells(r, i).Value > .Cells(r, j).Value Then
                        arr = .Cells(r, j).Resize(, 4).Value
                        .Cells(r, i).Resize(, 4).Cut .Cells(r, j)
                        .Cells(r, i).Resize(, 4).Value = arr
                    End If
                Next j
            Next i
        Next r
    End With
End Sub

Bearbeiten

Dies setzt voraus, dass Ihre Daten bei Zelle beginnen A1und die erste Spalte keine leeren Zellen enthält. Der fest codierte Wert 23ist darauf zurückzuführen, dass Sie angegeben haben, dass es nur sechs Transaktionen geben würde. Sie müssen diese Zahl für jede zusätzliche Transaktion um 4 erhöhen.

verwandte Informationen