VBAでワークシートのソートを活用する
流れ:新しいワークシート作成→配列を貼り付け→ソート実行→配列を格納→ワークシート削除
Range範囲の変更に注意(.SortFields.Add2 Key:=Range(“C2:C3833")の部分)
Sub testing()
'新しいワークシート作成
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add
'配列を貼り付け(arrBaseはグローバル変数)
ws.Range("A1").Resize(UBound(arrBase), UBound(arrBase, 2)) = arrBase
'ソート実行 昇順:xlAscending 降順:xlDescending
ws.Range("A1").AutoFilter
With ws.Sort
.SortFields.Clear
.SortFields.Add2 Key:=Range("D2:D3833"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
.SortFields.Add2 Key:=Range("C2:C3833"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
.SortFields.Add2 Key:=Range("A2:A3833"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
.SetRange Range("A1:Q3833")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'ソート後の配列を格納
arrNext = ws.Range("A1").CurrentRegion
'ワークシートを削除
Application.DisplayAlerts = False ' 削除時の警告メッセージを非表示にする
ws.Delete
Application.DisplayAlerts = True
End Sub