ワークシートの移動

にメンテナンス済み

基本: Move メソッドで移動する

シートの移動には Move メソッドを使い、移動先を Before(指定シートの前)または After(指定シートの後)で指定します。

Sheet1
Public Sub MoveSheet()
    ThisWorkbook.Worksheets("Sheet1").Move After:=ThisWorkbook.Worksheets("Sheet3")
End Sub
Before と After を両方省略した場合

Before と After のどちらも指定しないと、移動対象のシートは新しいブックにコピーではなく移動され、元のブックからは無くなります。意図せず実行しないよう、通常は必ずどちらか一方を指定してください。

先頭・末尾へ移動する

シートを先頭へ移動する
Public Sub MoveSheetToStart()
    With ThisWorkbook
        .Worksheets("Sheet1").Move Before:=.Worksheets(1)
    End With
End Sub
シートを末尾へ移動する
Public Sub MoveSheetToEnd()
    With ThisWorkbook
        .Worksheets("Sheet1").Move After:=.Worksheets(.Worksheets.Count)
    End With
End Sub

Worksheets.Count はワークシートの数です。グラフシートも含めて末尾に置きたい場合は、Worksheets ではなく Sheets を使います。

Worksheets と Sheets の違い

Worksheets はワークシートのみ、Sheets はグラフシートも含むコレクションです。インデックス番号は、ブック内の並び順(非表示シートも含む)に対応します。

複数のシートをまとめて移動する

Array 関数でシート名を配列にすると、複数のシートを一度に移動できます。

Sheet1
Public Sub MoveMultipleSheets()
    With ThisWorkbook
        .Worksheets(Array("Sheet1", "Sheet2")).Move After:=.Worksheets("Sheet4")
    End With
End Sub

複数シートの指定方法は、シートの選択方法と共通です。

ワークシートを選択する
Excel VBAでSelectメソッドを使ってシートを選択する方法を、シート名・インデックス指定から複数シートの選択、条件に合うシートの追加選択まで解説します。選択せずに操作する方法も紹介します。

移動先のシートが存在するか確認する

存在しないシート名を指定すると、実行時エラー 9「インデックスが有効範囲にありません」が発生します。移動前に存在チェックを行うと安全です。

存在確認してから移動する
Public Sub SafeMoveSheet()
    If Not SheetExists("Sheet1") Or Not SheetExists("Sheet3") Then
        MsgBox "移動元または移動先のシートが存在しません。"
        Exit Sub
    End If

    ThisWorkbook.Worksheets("Sheet1").Move After:=ThisWorkbook.Worksheets("Sheet3")
End Sub

Private Function SheetExists(ByVal sheetName As String) As Boolean
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = sheetName Then
            SheetExists = True
            Exit Function
        End If
    Next ws
End Function

別のブックへ移動する

Before / After に別ブックのシートを指定すると、そのブックへシートを移動できます。

別のブックの末尾へ移動する
Public Sub MoveSheetToOtherWorkbook()
    Dim destination As Workbook
    Set destination = Workbooks("Report.xlsx") ' 開いているブック

    With destination
        ThisWorkbook.Worksheets("Sheet1").Move After:=.Worksheets(.Worksheets.Count)
    End With
End Sub

移動したシートは元のブックから無くなります。元のシートを残したい場合は Copy メソッドを使います。

移動時の注意点

  • 数式の参照: 別ブックへ移動すると、他シートを参照している数式は外部参照に変わることがあります。
  • ブック構造の保護: ブックの構成が保護されている場合、Move はエラーになります。
  • ブック内のシートは最低 1 枚: 表示されているシートをすべて移動・削除してブックを空にすることはできません。

まとめ

  • 移動は Move メソッドに Before または After を指定する
  • どちらも省略すると新しいブックに移動されるので注意
  • 複数シートは Array で一括指定できる
  • 存在しないシート名はエラー 9 になるため、事前に確認する
#VBA #Excel #シート