ワークシートとグラフシートを別個に並べ替えるマクロ

Excelのワークシートとグラフシートを効率的に並べ替える方法

Excelのワークブックには、通常、複数のワークシートとグラフシートが含まれています。これらのシートを手動で並べ替えることは、非常に時間がかかり、エラーが発生する可能性があります。この記事では、Excel VBAを使用してワークシートとグラフシートを効率的に並べ替える方法について説明します。

このコードは何ができるのか

このVBAマクロは、ワークブック内のワークシートとグラフシートを並べ替えるために使用されます。ユーザーは、昇順または降順でシートを並べ替えることができます。また、ワークシートとグラフシートを一緒に並べ替えるか、ワークシートを先に並べ替えてからグラフシートを並べ替えるか、逆にグラフシートを先に並べ替えてからワークシートを並べ替えるかを選択することができます。

どんなシーンで役に立つのか

このマクロは、以下のようなシーンで役立ちます。

  • 大量のデータを分析し、結果をグラフで表示する場合。このマクロを使用すると、データとグラフを効率的に整理できます。
  • 複数のユーザーが同じワークブックを使用し、シートの順序が頻繁に変更される場合。このマクロを使用すると、シートの順序を簡単にリセットできます。

マクロのコード

以下のコードをVBAエディタより標準モジュールへ貼り付けてください。

VBAエディタはAlt+F11キーで起動します。空の標準モジュールは「挿入→標準モジュール」で作成されます。貼り付け後はVBAエディタは閉じてブックへ戻ります。

Sub SortSheets()
    Dim i As Integer
    Dim j As Integer
    Dim sortOrder As Variant
    Dim sheetOrder As Variant
    
    ' Get user input for sort order and sheet order
    sortOrder = InputBox("昇順は1、降順は0を入力してください:", "並べ替え順序", 1)
    If sortOrder = "" Then
        MsgBox "並べ替えを中断しました"
        Exit Sub
    End If
    sheetOrder = InputBox("ワークシートとグラフシートを一緒に並べ替える場合は0、ワークシートを先に並べ替える場合は1、グラフシートを先に並べ替える場合は2を入力してください:", "シートの並べ替え順序", 0)
    If sheetOrder = "" Then
        MsgBox "並べ替えを中断しました"
        Exit Sub
    End If
    
    ' Sort the sheets by name
    For i = 1 To ThisWorkbook.Sheets.Count
        For j = i + 1 To ThisWorkbook.Sheets.Count
            If sortOrder = 0 Then
                If ThisWorkbook.Sheets(j).Name > ThisWorkbook.Sheets(i).Name Then
                    Sheets(j).Move Before:=Sheets(i)
                End If
            Else
                If ThisWorkbook.Sheets(j).Name < ThisWorkbook.Sheets(i).Name Then Sheets(j).Move Before:=Sheets(i) End If End If Next j Next i ' Reorder the sheets based on the sheet order If sheetOrder = 1 Then ' Move all chart sheets to the end For i = ThisWorkbook.Sheets.Count To 1 Step -1 If TypeName(Sheets(i)) = "Chart" Then Sheets(i).Move After:=Sheets(ThisWorkbook.Sheets.Count) End If Next i ' Sort worksheets For i = 1 To ThisWorkbook.Sheets.Count If TypeName(Sheets(i)) = "Worksheet" Then For j = i + 1 To ThisWorkbook.Sheets.Count If TypeName(Sheets(j)) = "Worksheet" Then If sortOrder = 0 Then If Sheets(j).Name > Sheets(i).Name Then
                                Sheets(j).Move Before:=Sheets(i)
                            End If
                        Else
                            If Sheets(j).Name < Sheets(i).Name Then Sheets(j).Move Before:=Sheets(i) End If End If End If Next j End If Next i ' Sort chart sheets For i = 1 To ThisWorkbook.Sheets.Count If TypeName(Sheets(i)) = "Chart" Then For j = i + 1 To ThisWorkbook.Sheets.Count If TypeName(Sheets(j)) = "Chart" Then If sortOrder = 0 Then If Sheets(j).Name > Sheets(i).Name Then
                                Sheets(j).Move Before:=Sheets(i)
                            End If
                        Else
                            If Sheets(j).Name < Sheets(i).Name Then Sheets(j).Move Before:=Sheets(i) End If End If End If Next j End If Next i ElseIf sheetOrder = 2 Then ' Move all worksheets to the end For i = ThisWorkbook.Sheets.Count To 1 Step -1 If TypeName(Sheets(i)) = "Worksheet" Then Sheets(i).Move After:=Sheets(ThisWorkbook.Sheets.Count) End If Next i ' Sort chart sheets For i = 1 To ThisWorkbook.Sheets.Count If TypeName(Sheets(i)) = "Chart" Then For j = i + 1 To ThisWorkbook.Sheets.Count If TypeName(Sheets(j)) = "Chart" Then If sortOrder = 0 Then If Sheets(j).Name > Sheets(i).Name Then
                                Sheets(j).Move Before:=Sheets(i)
                            End If
                        Else
                            If Sheets(j).Name < Sheets(i).Name Then Sheets(j).Move Before:=Sheets(i) End If End If End If Next j End If Next i ' Sort worksheets For i = 1 To ThisWorkbook.Sheets.Count If TypeName(Sheets(i)) = "Worksheet" Then For j = i + 1 To ThisWorkbook.Sheets.Count If TypeName(Sheets(j)) = "Worksheet" Then If sortOrder = 0 Then If Sheets(j).Name > Sheets(i).Name Then
                                Sheets(j).Move Before:=Sheets(i)
                            End If
                        Else
                            If Sheets(j).Name < Sheets(i).Name Then
                                Sheets(j).Move Before:=Sheets(i)
                            End If
                        End If
                    End If
                Next j
            End If
        Next i
    End If
    
    ' Select the first sheet
    ThisWorkbook.Sheets(1).Select
End Sub

マクロの使い方

マクロリストを開いて「SortSheets」マクロを実行してください。マクロリストはAlt+F8キーで開きます。

最初のInputoboxで、昇順か降順かを指定します。

2つめのInputoboxで、ワークシートとグラフシートが混ざっている際の対処方法を指定します。ワークシートしかない場合はどれでもOKです。

まとめ

この記事では、Excel VBAを使用してワークシートとグラフシートを効率的に並べ替える方法について説明しました。このマクロは、データ分析や共同作業において、作業効率を向上させるための強力なツールです。

コメント