VBATips

指定ブックのシートの並びを名前順に並び替える【パーツ化】【ExcelVBA】

指定ブックのシートの並びを名前順に並び替える

VBA開発案件にて、運用ブックは本来名前順(日付順)で並んでいる想定が、
ユーザーが触ってしまったなどで並びがおかしい場合があります。

ユーザーにその部分の運用を任すのは無駄なルールになるので、
マクロ側で並び替えをしてしまいます。パーツ化してますので、他に流用が可能です。

指定ブックのシートの並びを名前順に並び替えるコード

'■指定ブックのシートの並びを名前順に並び替える
Public Function Call_SortWorkSheets(wb As Workbook)
    Dim i As Long, j As Long
    Dim swap As Worksheet
    
    Dim cnt As Long: cnt = wb.Worksheets.Count
    Dim ws() As Worksheet
    
    '■ワークシート配列を定義し、wb内のシートをいれる
    ReDim ws(1 To cnt)
    For i = 1 To cnt
        Set ws(i) = wb.Worksheets(i)
    Next i
    
    '■ワークシートを名前順に移動
    For i = 1 To cnt - 1
        For j = i + 1 To cnt
            If ws(i).Name > ws(j).Name Then
                Set swap = ws(i)
                Set ws(i) = ws(j)
                Set ws(j) = swap
            End If
        Next
    Next
    
    '■並べ替え
    For i = 1 To cnt
        ws(i).Move After:=wb.Sheets(wb.Sheets.Count)
    Next
End Function

使い方

実際の使い方は以下です。

Public Sub sample()
    Call Call_SortWorkSheets(ActiveWorkbook)        '前面表示されているブックの場合
'    Call Call_SortWorkSheets(ThisWorkbook)          'マクロ実行ブックの場合
'    Call Call_SortWorkSheets(wb)                    '変数wbの場合※Workbook変数にSet必要
End Sub

注意点

  • すべてのシートが対象となるので、並び替え対象外シートがある場合は、
    IF文などでcontinueするなどしてください。

関連記事

コメント

タイトルとURLをコピーしました