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