【VBA(Excelマクロ)】シートを移動させる方法を徹底解説|先頭・最後尾・別ブック

スポンサードリンク
VBA

この記事を読んでわかること

  • VBAでワークシートの位置を移動させる方法がわかる
  • 先頭や最後尾にシートを移動させる方法や、複数のシートを移動させる方法を学べる
  • シートを移動する場合の注意点を知れる

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします

スポンサードリンク

VBA(Excelマクロ)でシートを移動させる方法

シートの位置を移動させるには、「Move」メソッドを使います。

メソッドとは、特定のオブジェクト(セルやシートなど)に対して実行できる機能で、
「オブジェクト名.メソッド名」というコードで記述します。
「Worksheets(“Sheet1”).Move」と記述することで、Moveメソッドをワークシートに対して実行したということになります。

ではまず、シート移動の基本構文から学んでいきましょう。

シート移動の基本構文

Worksheets("Sheet1").Move Before:=Worksheets("Sheet3")

上記コードのように、移動するシート.Move 移動先と記述することで、シートを移動させることができます。
今回の場合は、「Sheet1」「Sheet3」の前(左)に移動した例です。

シートの移動

移動先は「Before」の他に「After」があります。

  • Before:指定したシート(移動先)の前(左)に移動
  • After:指定したシート(移動先)の後ろ(右)に移動

シート指定はシート名ではなく、シート番号で行うことも可能です。

Worksheets(1).Move After:=Worksheets(3) ' 一番左のシートを、左から3番目のシートの後ろに移動

アクティブシートを移動

シート名やシート番号ではなく、「ActiveSheet」と記述することで、アクティブシート(選択状態のシート)を移動させることができます。

ActiveSheet.Move Before:=Worksheets("Sheet3") ' アクティブシートを「Sheet3」の前に移動

指定のシートをアクティブシートの前後に移動させることもできます。
下記コードは、一番左のシートをアクティブシートの前(左)に移動させた例です。

Worksheets(1).Move Before:=ActiveSheet ' 一番左のシートをアクティブシートの前(左)に移動
シートをアクティブシートの前に移動

移動後は、移動したシートがアクティブになります。
不都合な場合は「Select」メソッドを使って、アクティブシートを変更してください。
下記記事にて詳しく解説しております。

シートを先頭に移動

指定のシートをブックの先頭に移動させることも可能です。

移動先をシート番号1(一番左のシート)の前(左)に指定することで、ブック先頭に移動します。

Worksheets("Sheet2").Move Before:=Worksheets(1)
シートをブックの先頭に移動

シートを最後尾に移動

ブックの最後尾にシートを移動させる場合は、下記のように記述してください。

Worksheets("Sheet1").Move After:=Worksheets(Worksheets.Count)
シートをブックの最後尾に移動

「Worksheets.Count」は、現在のワークシートの数が入ります。
ワークシートが3枚(Sheet1~3)なら3となり、Worksheets(3)になります。
Worksheets(3)は一番後ろ(一番右)のシートのことになるので、さらにその後ろ(After)の最後尾に移動されます。

複数のシートを一括で移動

複数のシートを移動させたい場合は、配列を使いましょう。

Worksheets(Array("Sheet2", "Sheet3")).Move Before:=Worksheets("Sheet1")
複数のシートを移動

「Array(“Sheet2”, “Sheet3”)」と記述することで、複数のシートを指定することができます。

スポンサードリンク

別のブックへシートを移動させるには

別のブックへシートを移動させるには、別ブックを開く必要があります。

前提知識{ファイルを開く・保存・閉じる
前提知識{変数の宣言や使い方

Sub 別ブックへのシート移動()
    Dim srcBook As Workbook
    Dim destBook As Workbook

    Set srcBook = ThisWorkbook
    Set destBook = Workbooks.Open("C:\Utatane\移動先.xlsx")

    srcBook.Worksheets("Sheet1").Move Before:=destBook.Worksheets(1)

    destBook.Save ' 移動先ブックを保存する
    destBook.Close ' 移動先ブックを閉じる(任意)
End Sub

「Move」は「シートを移動」させるメソッドなので、移動させたシートは元のブックから消えます。
元のブックにシートを残したい場合は、「Move」ではなく「Copy」メソッドを使ってください。
使い方は下記記事で解説しております。

スポンサードリンク

シートを移動する場合の注意点

アクティブでないシートを移動させた場合、最後に移動したシートがアクティブになります。
その後のプログラムによっては予期せぬ結果になることがありますので注意しましょう。

必要に応じて「Select」メソッドを使うなどして、アクティブシートを変更してください。

スポンサードリンク

エラーが発生した場合の対処法

実行時エラー-2147352565
実行時エラー-2147352565

「実行時エラー -2147352565」が発生した場合は、指定するシート名やシート番号に誤りがある可能性が高いです。
コードを再確認しましょう。
シート名で指定している場合は、大文字小文字・全角半角・スペースのあるなしなどで不一致と判断される場合があります。

また、ブックが保護されている場合、下図のようなエラーが発生する場合があります。

WorksheetクラスのMoveメソッドが失敗しました
WorksheetクラスのMoveメソッドが失敗しました

エクセルメニューの「校閲」「ブックの保護」をクリックして、ブックの保護を解除してからマクロを実行してください。

ブックの保護を解除する方法
スポンサードリンク

最後に

VBA(Excelマクロ)でシートを移動させる方法について解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました