ゴミ溜め@技術系日常系雑文

主にWeb技術やそのほかつまづいたこととか引っかかって調べたこととかをまとめてます。

はてなダイアリーから引っ越しました。)

Excel マクロ(VBA) でシートを名前順でソートする

備忘録としてVBAマクロを掲載していくシリーズ。

シートをシート名昇順にソートするマクロ。
Excel マクロ(VBA) でシート一覧を作成の応用。

Sub シートをソート()

    ' 画面更新を一時的に無効化する。
    Application.ScreenUpdating = False
        
    Dim cnt As Long
    cnt = Sheets.count
    
    ' 作業用シートをブック先頭に作成
    Dim work As Worksheet
    Set work = Worksheets.Add(Sheets(1))
    
    ' シート名一覧を作成する処理
    Dim i As Long
    For i = 1 To cnt
        work.Cells(i, 1) = Sheets(i).Name
    Next i
    
    ' 一覧をExcel標準機能でソート
    work.Range("A1:A" & i).Sort Key1:=Range("A1"), _
                       Order1:=xlAscending, _
                       Header:=xlGuess

    ' 一覧の順番通りにシートを並べ替える
    For i = 1 To cnt
        Sheets(work.Cells(i, 1).Value).Move before:=work
    Next i
    
    ' シート削除時の警告表示を停止
    Application.DisplayAlerts = False
        
    ' 作業用シートを削除
    work.Delete
    
    ' 警告表示を再開する
    Application.DisplayAlerts = False
    
    ' 画面更新を再開する
    Application.ScreenUpdating = True
        
End Sub