【Excel VBA】ワークシートの順番を移動・入れ替える方法 (.Move)

VBAで新しくレポートシートを作成した際、そのシートをブックの一番左(先頭)や一番右(末尾)に移動させて、ユーザーが見つけやすいように整理したい、という場面はよくあります。

シートの順番は手作業でドラッグ&ドロップすれば変更できますが、VBAの.Moveメソッドを使えば、この並べ替え操作も自動化できます。この記事では、.Moveメソッドを使ってシートを特定の位置に移動させる基本的な方法を解説します。


目次

Worksheet.Move メソッドの基本

.Moveメソッドは、指定したシートを別の位置に移動させるための命令です。

移動させたいシート.Move Before:=基準となるシート または 移動させたいシート.Move After:=基準となるシート

  • Before引数: 指定したシートの**前(左隣)**に移動します。
  • After引数: 指定したシートの**後(右隣)**に移動します。

このBeforeAfterは、どちらか一方しか指定できません。


完成した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("データ"))を指定します。

【重要】引数を省略した場合の動作

もし、BeforeAfterの両方の引数を省略して、 Worksheets("Report").Move のようにコードを実行すると、「Report」シートは新しいブックに移動され、元のブックからは削除されます。

これは、シートを単独のファイルとして切り出したい場合には便利な機能ですが、意図せず実行してしまうとブックの構成が変わってしまうため、注意が必要です。


まとめ

シートの順番をVBAで変更するには、.Moveメソッドを使います。

  • 先頭に移動: mySheet.Move Before:=Worksheets(1)
  • 末尾に移動: mySheet.Move After:=Worksheets(Worksheets.Count)
  • 特定のシートの隣に移動: mySheet.Move After:=Worksheets("基準シート")

マクロでレポートシートなどを自動生成した後にこの処理を加えることで、ブックの構成をきれいに整え、ユーザーにとって分かりやすいファイルを提供することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次