VBAで新しくレポートシートを作成した際、そのシートをブックの一番左(先頭)や一番右(末尾)に移動させて、ユーザーが見つけやすいように整理したい、という場面はよくあります。
シートの順番は手作業でドラッグ&ドロップすれば変更できますが、VBAの.Move
メソッドを使えば、この並べ替え操作も自動化できます。この記事では、.Move
メソッドを使ってシートを特定の位置に移動させる基本的な方法を解説します。
Worksheet.Move メソッドの基本
.Move
メソッドは、指定したシートを別の位置に移動させるための命令です。
移動させたいシート.Move Before:=基準となるシート
または 移動させたいシート.Move After:=基準となるシート
Before
引数: 指定したシートの**前(左隣)**に移動します。After
引数: 指定したシートの**後(右隣)**に移動します。
このBefore
とAfter
は、どちらか一方しか指定できません。
完成したVBAコード(実用例)
ここでは、最もよく使われる3つの移動パターンをコード例として紹介します。
① シートをブックの先頭に移動する
Sub MoveSheetToBeginning()
Dim sheetToMove As Worksheet
' 移動したいシートを名前で指定 (例: "Report")
Set sheetToMove = ThisWorkbook.Worksheets("Report")
' ブックの最初のシートの前に移動
sheetToMove.Move Before:=ThisWorkbook.Worksheets(1)
MsgBox "「" & sheetToMove.Name & "」をブックの先頭に移動しました。"
End Sub
Worksheets(1)
がブックの一番左にあるシートを指すため、そのBefore
(前)に移動させることで、シートを先頭に配置できます。
② シートをブックの末尾に移動する
Sub MoveSheetToEnd()
Dim sheetToMove As Worksheet
' 移動したいシートを名前で指定 (例: "Summary")
Set sheetToMove = ThisWorkbook.Worksheets("Summary")
' ブックの最後のシートの後ろに移動
sheetToMove.Move After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
MsgBox "「" & sheetToMove.Name & "」をブックの末尾に移動しました。"
End Sub
Worksheets.Count
でシートの総数を取得し、Worksheets(Worksheets.Count)
で最後のシートを特定します。そのAfter
(後ろ)に移動させることで、シートを末尾に配置できます。
③ 特定のシートの隣に移動する
Sub MoveSheetNextTo()
Dim sheetToMove As Worksheet
Dim referenceSheet As Worksheet
' 移動したいシートと、基準となるシートをそれぞれ指定
Set sheetToMove = ThisWorkbook.Worksheets("Appendix")
Set referenceSheet = ThisWorkbook.Worksheets("MainData")
' 「MainData」シートの後ろに「Appendix」シートを移動
sheetToMove.Move After:=referenceSheet
MsgBox "「" & sheetToMove.Name & "」を「" & referenceSheet.Name & "」の次に移動しました。"
End Sub
コードのポイント解説と注意点
対象シートの指定
移動させたいシートは、Worksheets("シート名")
のように名前で指定するのが最も安全で確実です。
移動先の指定
Before
またはAfter
引数を使って、移動先を明確に指示します。引数の後には、基準となるシートオブジェクト(例: Worksheets(1)
やWorksheets("データ")
)を指定します。
【重要】引数を省略した場合の動作
もし、Before
とAfter
の両方の引数を省略して、 Worksheets("Report").Move
のようにコードを実行すると、「Report」シートは新しいブックに移動され、元のブックからは削除されます。
これは、シートを単独のファイルとして切り出したい場合には便利な機能ですが、意図せず実行してしまうとブックの構成が変わってしまうため、注意が必要です。
まとめ
シートの順番をVBAで変更するには、.Move
メソッドを使います。
- 先頭に移動:
mySheet.Move Before:=Worksheets(1)
- 末尾に移動:
mySheet.Move After:=Worksheets(Worksheets.Count)
- 特定のシートの隣に移動:
mySheet.Move After:=Worksheets("基準シート")
マクロでレポートシートなどを自動生成した後にこの処理を加えることで、ブックの構成をきれいに整え、ユーザーにとって分かりやすいファイルを提供することができます。