行の並べ替え: 日付とアクション情報がグループ化された 6 つのトランザクション

行の並べ替え: 日付とアクション情報がグループ化された 6 つのトランザクション

スプレッドシートの取引情報を日付の昇順で整理する必要があります。各行は 1 人の人物と、その人の履歴にある最後の 6 件の取引を表します。問題は、データベースが最後の 6 件の取引を吐き出すものの、順番どおりには吐き出さないため、Excel で手動で行う必要があることです。

取引日と有効期限は「ギフト」と「アクション」のデータに結び付けられている必要があるため、このアプリケーションでは行の並べ替え機能は使用できません。これらの 4 つの列は、グループとしてまとめておく必要があります。

添付のスクリーンショットでは、列をグループ化したままにしておく必要があることを色で示し、データが正しい順序であれば最初に来るはずのトランザクションを赤で強調表示しています。これで、問題 (「最初」が各個人ごとに異なる列にある) と私の目標 (各列グループを行ごとに日付の昇順で並べ替える) がより明確になると思います。

メモ付きスクリーンショット

答え1

このコードを試してください。これを VB エディター ウィンドウに貼り付けて実行します (詳細については、「VBA コードの実行方法」を Google で検索してください)。これはまったく効率的ではありませんが、機能するはずです。

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

編集

これは、データがセル から始まりA1、最初の列に空のセルがないことを前提としています。ハードコードされた値は、23トランザクションが 6 つしかないとおっしゃったためです。追加のトランザクションごとに、この数値を 4 ずつ増やす必要があります。

関連情報