![行の並べ替え: 日付とアクション情報がグループ化された 6 つのトランザクション](https://rvso.com/image/1597820/%E8%A1%8C%E3%81%AE%E4%B8%A6%E3%81%B9%E6%9B%BF%E3%81%88%3A%20%E6%97%A5%E4%BB%98%E3%81%A8%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%81%8C%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%206%20%E3%81%A4%E3%81%AE%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3.png)
スプレッドシートの取引情報を日付の昇順で整理する必要があります。各行は 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 ずつ増やす必要があります。