シートを指定順に並べ替えるVBAマクロのコード

Excel VBAマクロでシートを指定順に並べ替える方法

このマクロが実現すること

Excelのブックには複数のシートが含まれることが多く、これらのシートを特定の順番に並べ替えたい場面がよくあります。この記事で紹介するマクロを使用すると、ユーザーが指定した順番にシートを簡単に並べ替えることができます。

マクロの特徴

  • ユーザーが指定したセル範囲に基づいてシートを並べ替えます。事前にどこかのセルへ、どのような順で並べ替えをしたいかを入力しておいてください。

  • ワークシートだけでなく、グラフシートも並べ替えの対象として扱います。
  • 指定されていないシートは、指定したシートの後にそのままの順番で表示されます。
  • マクロの実行前後でアクティブシートやセルの位置は変わりません。

マクロのコード

以下のコードをVBAエディター(Altキー+F11キーで起動)の標準モジュールへ貼り付けてください(挿入→標準モジュール)。

すると「SortSheetsByOrder」というマクロが作成されます。

Sub SortSheetsByOrder()

    Dim rng As Range
    Dim cell As Range
    Dim sheetNames As Collection
    Dim ws As Worksheet
    Dim i As Long
    Dim origSheet As Worksheet
    Dim origCell As Range

    ' 現在のアクティブシートとアクティブセルを記憶
    Set origSheet = ActiveSheet
    Set origCell = ActiveCell

    ' インプットボックスでユーザーに範囲を指定させる
    On Error Resume Next
    Set rng = Application.InputBox("並べ替えたいシート名のリストを選択してください", Type:=8)
    On Error GoTo 0

    ' キャンセルされた場合は終了
    If rng Is Nothing Then Exit Sub

    ' 並べ替えたいシート名をコレクションに追加
    Set sheetNames = New Collection
    For Each cell In rng
        If SheetExists(cell.Value) Then
            sheetNames.Add cell.Value
        End If
    Next cell

    ' シートを並べ替え
    For i = sheetNames.Count To 1 Step -1
        Sheets(sheetNames(i)).Move Before:=Sheets(1)
    Next i

    ' オリジナルのセル位置に戻す
    origSheet.Activate
    origCell.Activate

End Sub

Function SheetExists(sheetName As String) As Boolean
    Dim ws As Object
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(sheetName)
    On Error GoTo 0
    If Not ws Is Nothing Then SheetExists = True
End Function

マクロ実行の手順

  1. マクロをVBAエディタに取り込みます(標準モジュールへ挿入)。
  2. Excel上でマクロを実行するセルを選択します。SortSheetsByOrderマクロを実行します(Altキー+F8キーでマクロリストが表示されるので選んで実行)。
  3. マクロを実行すると、並べ替えの順序を指定するためのインプットボックスが表示されます。ドラッグで指定してください。

  4. 並べ替えが完了します。

実行後の確認点

マクロを実行すると、インプットボックスが表示され、ユーザーは並べ替えたいシート名のリストを選択します。その後、マクロは指定した順番にシートを並べ替えます。指定されていないシートは、並べ替え後のシートの後にそのままの順番で表示されます。

使用時の注意点

  • 並べ替えの順番は事前にセル範囲へ入力をしておいてください。
  • 指定したセル範囲に存在しないシート名は無視されます。そのため、シート名を正確に入力することが重要です。
  • 同じシート名を複数回指定することはできません。一度指定したシート名を再度指定すると、マクロは正しく動作しない可能性があります。

なお、現在のシート名リストが事前に必要な場合は、以下のページにあるマクロの導入を検討してください。

Excelの全ワークシート名を一覧化!使えるVBAマクロを紹介
Excelの全ワークシート名を一覧化!使えるVBAマクロを紹介Excelブック内の全てのワークシート名を一覧化したいと思ったことはありませんか?今回は、そんなニーズに応えるVBAマクロの紹介をします。このマクロができること ブック内のすべて...

 

コメント