🛸

【VBA】ブック内のシートを名前順にソートするコード(除外するシートを選択可能)

2023/06/29に公開

【VBA】各自治体の様式を同じブックのシートに保存するとき、リネームして保存するでブックにシートを集めた後は自治体番号順にソートしたくなると思います。

Sub SortSheets(wb As Workbook, Optional jogaiSheet As Long = 0)
    
    Dim wsCount As Long
    Dim wsList() As Worksheet
    Dim i As Long, j As Long
    Dim swap As Worksheet
    
    wsCount = wb.Worksheets.Count
    ReDim wsList(1 To wsCount)
    
    For i = 1 To wsCount
        Set wsList(i) = wb.Worksheets(i)
    Next i
    
    'ワークシートを名前順に移動
    For i = jogaiSheet + 1 To wsCount - 1
        For j = i + 1 To wsCount
            If wsList(i).Name > wsList(j).Name Then
                Set swap = wsList(i)
                Set wsList(i) = wsList(j)
                Set wsList(j) = swap
            End If
        Next j
    Next i
    
    '並べ替え
    For i = jogaiSheet + 1 To wsCount
        wsList(i).Move After:=wb.Sheets(wb.Sheets.Count)
    Next i
    
End Sub

シート名を配列に格納(Redimは動的配列の宣言です。)し、配列の要素をソート、実際のシートの並べ替えという順で処理しています。
仮引数のOptional jogaiSheet As Longは例えば1をにすると1番目のシートを除外します。これは1枚目を串刺し集計用のシート、2枚目以降を自治体のシートとしたとき、集計用シートは1枚目のままにしたいときに指定します。

使い方

Sub test()
    SortSheets ThisWorkbook, 1
End Sub

または

Sub test()
    SortSheets ThisWorkbook
End Sub

ThisWorkBookをソートしたいブックに置き換えてください。

Discussion