ワークシートの移動
にメンテナンス済み
基本: 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
#シート