VBA シートを移動する

はじめに

Excel VBA マクロでシートを移動する方法を紹介します。

Sheets.Move または Worksheets.Move メソッドから、シートを移動できます。

1 番左や 1 番右など位置を指定したり、別ブックなどに移動できます。

シートを追加するには「シートを取得する」をご覧ください。
シートを指定して取得するには「シートを取得する」をご覧ください。
  • 目次
    • シートを移動する
    • 移動したシートを編集する
    • アクティブシートを移動する
    • 別ブックのシートを移動する

シートを移動する

sheet1

Sheets の引数にインデックスかシート名を指定すると、そのシートを移動できます。

1 番目のシートを移動するには Sheets(1).Move または Worksheets(1).Move を入力します。1 番左のシートが 1 です。

Sheets(1).Move        ' 1 番目のシートを移動
Sheets("Sheet1").Move ' シート「Sheet1」を移動

Worksheets(1).Move        ' 1 番目のシートを移動
Worksheets("Sheet1").Move ' シート「Sheet1」を移動

新しいブックにシートが移動されアクティブになります。

3

同じブックの位置を指定

位置を引数で指定して、同じブックに移動できます。

引数には次のものがあり、すべて省略できます。

引数「Before」指定したシートの左側に移動します。引数「After」と一緒に指定できません。
引数「After」指定したシートの右側に移動します。引数「Before」と一緒に指定できません。
Call Sheets(1).Move(Before:=Sheets(3))        ' 3 番目のシートの左に移動
Call Sheets(1).Move(After:=Sheets("Sheet3"))  ' シート「Sheet3」の右に移動
4

Sheets と Worksheets の違いはワークシート以外を取得するかどうかです。

  • Sheets:すべてのシートを取得
  • Worksheets:ワークシートのみ取得(グラフシートなどは取得しない)

このためグラフシートなどは Worksheets.Move で移動できません。

1 番左や右に移動する

シートを 1 番左に移動するには、引数に Before:=Sheets(1) を入力します。

シートを 1 番右に移動するには、引数に After:=Sheets(Sheets.Count) を入力します。

Call Sheets(1).Move(Before:=Sheets(1))           ' 1 番左に移動
Call Sheets(1).Move(After:=Sheets(Sheets.Count)) ' 1 番右に移動

複数のシートを移動

1 番目と 2 番目のシートを移動するには Sheets(Array(1, 2)).Move または Sheets(Array("Sheet1", "Sheet2")).Move のように入力します。

Sheets(Array(1, 2)).Move               ' 1 番目と 2 番目のシートを移動
Sheets(Array("Sheet1", "Sheet2")).Move ' シート「Sheet1」と「Sheet2」を移動

Worksheets(Array(1, 2)).Move               ' 1 番目と 2 番目のシートを移動
Worksheets(Array("Sheet1", "Sheet2")).Move ' シート「Sheet1」と「Sheet2」を移動

引数に配列でインデックスやシート名を指定します。

すべてのシートを移動

すべてのシートを新しいブックに移動すると「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。このため、必ず 1 つはシートを残す必要があります。

シートを追加して、それ以外をすべて移動するには次のように入力します。

Dim wb As Workbook
Set wb = ActiveWorkbook ' このブックのシートをすべて移動
Dim ws As Worksheet
Set ws = Worksheets.Add ' エラー回避のため追加するシート

Dim twb As Workbook
Set twb = Workbooks.Add(xlWBATWorksheet)    ' 新しいブックに移動
twb.Worksheets(1).Name = "後で削除"
' Set twb = Workbooks.Open("D:\Book2.xlsx") ' ブックを開いて移動

' シートを移動する
Dim s As Variant
For Each s In wb.Sheets
    If s.Name <> ws.Name Then
        Call s.Move(After:=twb.ActiveSheet)
    End If
Next
ブックを開くには「ワークブックを保存する」をご覧ください。

移動したシートを編集する

移動したシートはアクティブになります。ActiveSheet でアクティブシートを取得できます。

Call Worksheets(1).Move(After:=Sheets(2))
Dim ws As Worksheet
Set ws = ActiveSheet ' 移動したシートがアクティブになっている

' そのシートに対して編集
ws.Name = "移動"
5

新しいブックを保存

移動して作成されたブックはアクティブになります。ActiveWorkbook でアクティブブックを取得できます。

Application.DisplayAlerts = False ' メッセージを非表示

Call Worksheets(1).Move   ' 新しいブックに移動
Call ActiveWorkbook.SaveAs("D:\NewBook.xlsx", xlOpenXMLWorkbook) ' 名前を付けて保存
Call ActiveWorkbook.Close ' 新しいブックを閉じる

Application.DisplayAlerts = True  ' メッセージを表示
ブックを保存するには「ワークブックを保存する」をご覧ください。

この VBA のコードがあるシートを別ブックに移動した後に Application を操作すると、オートメーションエラーになります。

アクティブシートを移動する

アクティブシートを移動するには ActiveSheet.Move を入力します。

Call ActiveSheet.Move
Call ActiveSheet.Move(After:=Sheets(Sheets.Count)) ' アクティブシートを一番右に移動

アクティブシートとは、開いているシートのことです。

選択シートを移動

アクティブブックの選択しているシートを移動するには ActiveWindow.SelectedSheets.Move を入力します。複数のシートが選択されているときは、そのすべてのシートを移動します。

Call ActiveWindow.SelectedSheets.Move           ' 選択しているすべてのシートを移動
Call ActiveWindow.SelectedSheets(1).Move        ' 選択している 1 番左のシートを移動
Call ActiveWindow.SelectedSheets("Sheet2").Move ' 選択しているシート「Sheet2」を移動

VBA を実行しているブックの選択しているシートを移動するには ThisWorkbook.Windows(1).SelectedSheets.Move を入力します。

' このコードを実行しているブックの選択シートを移動
Call ThisWorkbook.Windows(1).SelectedSheets.Move
' このコードを実行しているブックに移動
Call ThisWorkbook.Windows(1).SelectedSheets.Move(After:=ThisWorkbook.ActiveSheet)

' 開いているブック「Book1.xlsx」の選択シートを移動
Workbooks("Book1.xlsx").Windows(1).SelectedSheets.Move

SelectedSheets のインデックスは、選択している中で 1 番左のシートが 1 です。

ブックの指定について詳しくは下記の「別ブックのシートを移動する」をご覧ください。

別ブックのシートを移動する

ブックを指定しないシートの操作はすべて「アクティブブック」に対して行われます。

  • アクティブブック:開いているすべてのブックの中で一番手前に表示されているブックです。
  • VBA を実行しているブック:実行している VBA のコードがあるブックです。

アクティブブック

ブックを指定しないシートの操作は、アクティブブックを表す ActiveWorkbook. が省略されています。

' どちらも同じコード
Call Sheets.Add
Call ActiveWorkbook.Sheets.Add
ショートカットや VBA の IDE から実行したときに、別ブックがアクティブになっていることがあります。

VBA を実行しているブック

VBA を実行しているブックに対して操作するには ThisWorkbook を入力します。

' VBA を実行しているブックに対して操作
Call ThisWorkbook.Sheets.Add
Call ThisWorkbook.Worksheets.Add

ブックを指定

ブックを指定するには Workbooks の引数にブック名またはインデックスを指定します。

ブック「Book2.xlsx」を指定するには Workbooks("Book2.xlsx") を入力します。

' ブック「Book2.xlsx」のシート「Sheet2」の前に移動
Call Sheets(1).Move(Before:=Workbooks("Book2.xlsx").Sheets("Sheet2"))

' 2 番目のブックの 2 番目のシートの後ろに移動
Call Sheets(1).Move(After:=Workbooks(2).Sheets(2))

Workbooks のインデックスは、ブックを開いた順番に 1 からスタートします。