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

目的別コードワークシート操作

Posted by rafavba