ワークシートのブック内移動と新規ブックへの移転を分かりやすく

vbasheetmoveeyecatch

エクセルVBAでシートの移動や移転についての記述方法を説明します。
移動と移転にはMoveメソッドを使用します。
シート整理では必要なスキルですので使い慣れておきましょう。

こんにちは、じゅんぱ店長(@junpa33)です。

エクセルシートの並び順は変更することが出来ます。マウス操作では、シートタブをドラッグドロップで簡単に移動させることが出来ます。

では,

このような移動をVBAではどのように記述すればよいのでしょうか?

今回は、このシートの移動のVBAについて説明して行きます。

シートを移動・移転させる

vbasheetmovep014

シートの移動にはいくつかのパターンがあります。

それぞれのパターンの説明について、分類分けを行っていますので、次の見出しから項目に飛ぶことが出来ます。

シートの移動と移転にはMoveメソッドを使う

VBAの記述でシートを移動させるためには、「Move」を使用することになります。

Moveの構文

シートオブジェクト.Move (Before, After)

項目内容
シートオブジェクト移動させたいWorksheets、Sheetsを指定
Before指定シートの前 (Before := で指定する)
After指定シートの後 (After := で指定する)

同じエクセルBOOK内移動

シートタブの先頭(最左)、最後(最右)、指定シートの前(左)、指定シートの後(右)への移動を行うことが出来ます。

Moveメソッドのそれぞれの使い方は以下のように記述します。

シートタブの先頭(最左)

シートを最初(一番左端)に移動させたい時は、今ある一番初めのシート名 例えばSheet1とか の手前というコードの記述で指定してあげます。

Worksheets(“移動シート”).Move Before := Worksheets(“Sheet1”) とか

この記述は「移動シート」を「Sheet1」シートの手前(左)に移動させるというコードですが、

このコードでの注意点としては、今ある最初(一番左)のシート名が分かっていことが必要です。分からなければ成立しないコード文だということです。

従ってどんな場合でも使えるコード文として、 ” シートのインデックス番号 ” を使った記述方法を覚えておきましょう。

シートタブの先頭(最左)

Worksheetオブジェクト(移動させるシート).Move Before := Worksheets(1)

VBA
Sub シートタブの先頭()
    Worksheets("移動シート").Move before:=Worksheets(1)
End Sub
vbasheetmovep001
矢印下001
vbasheetmovep002

シートタブの最後(最右)

シートを最後(一番右端)に移動させたい時は、今ある最後のシート名 例えばSheet3とか の後というコードの記述で指定してあげます。

Worksheets(“移動シート”).Move After := Worksheets(“Sheet3”) とか

これも先ほどの先頭の場合と同じで、最後のシート名が明らかでない場合は、このコード記述を使うことが出来ません。

従って、この場合も、シートのインデックス番号を利用して最後のシートを指定する方法を覚えておきましょう。

シートタブの最後(最右)

Worksheetオブジェクト(移動させるシート).Move After := Worksheets(Worksheets.Count)

VBA
Sub シートタブの最後()
    Worksheets("移動シート").Move after:=Worksheets(Worksheets.Count)
End Sub
vbasheetmovep001
矢印下001
vbasheetmovep003

シートタブの指定シートの前(左)

指定するシートの手前(左)に移動させたい時はBeforeを使って場所を記述します。

この移動のケースでは、指定するシート名が分かっている場合も多いので、直接シート名を指定することが多いです。

シートを移動させるときに、シートタブの途中(〇〇シートと△△シートの間)に移動の場合は、可能であれば出来るだけ移動の基準点となる指定シートはシート名で指定する様にしたいです。

エクセルBOOK内でのシート枚数やシート位置が変わる環境下では、シートのインデックス番号の特定方法については少々面倒です。

両端のシートの位置指定以外は、、指定シートのインデックス番号を取得するために、そのシート名を使って位置を調べるという何とも2度手間的な煩わしそうな作業が必要になります。

シートタブの指定シートの前(左)

Worksheetオブジェクト(移動させるシート).Move Before := Worksheets(指定シート名)

VBA
Sub シートタブの指定シートの前()
    Worksheets("移動シート").Move Before:=Worksheets("Sheet3")
End Sub
vbasheetmovep001
矢印下001
vbasheetmovep004

シートタブの指定シートの後(右)

指定するシートの後(右)に移動させたい時はAfterを使って場所を記述します。

この移動のケースでは、Before同様、指定するシート名が分かっている場合も多いので、直接シート名を指定することが多いです。

シートタブの指定シートの後(右)

Worksheetオブジェクト(移動させるシート).Move After := Worksheets(指定シート名)

VBA
Sub シートタブの指定シートの後()
    Worksheets("移動シート").Move After:=Worksheets("Sheet2")
End Sub
vbasheetmovep001
矢印下001
vbasheetmovep005

複数のシートを移動させる(自動配置)

移動させるシートが複数ある場合はまとめて移動させることが出来ます。

Array関数を利用すると移動させたいシートをまとめることが出来ます。

vbahairetu2eyecatch Array・LBound・RBoundの配列関数と各ステートメントを最速理解
複数のシートを移動させる(自動配置)

Worksheetオブジェクト(Array(移動させるシート1,移動させるシート2・・)).Move Before := Worksheets(指定シート名)

この方法は、Arrayでまとめて指定したシートを、エクセルが自動で配置順序を決めて並べていきます。

Array(“移動シートA”, “移動シートB”, “移動シートC”)を、Array(“移動シートC”, “移動シートB”, “移動シートA”)と記述してもVBAコード実行後は同じ以下のようになります。

VBA
Sub 複数のシートの移動()
    Worksheets(Array("移動シートA", "移動シートB", "移動シートC")) _
            .Move After:=Worksheets(Worksheets.Count)
End Sub
vbasheetmovep006
矢印下001
vbasheetmovep007

複数のシートを移動させる(ユーザーが配置)

シートを移動させる目的は、ユーザーが設置したい位置にシートを置くために移動させることでしょう。

複数のシートをまとめて移動させるとエクセルが自動配置してしまうため、逆に面倒なこともあるでしょう。

では、最初からユーザーが考える順でシートを移動させるためには、VBAコード記述にも工夫が必要になります。

fornextirekoeyecatch For~Nextのループと入れ子構造をVBA最速理解
複数のシートを移動させる(ユーザーが配置)

Array関数を使って配列をバリアント型変数に格納し順番に移動させる。

変数 = Array(“移動シートC”, “移動シートB”, “移動シートA”)

Worksheets(変数()).Move After:=Worksheets(Worksheets.Count)

VBA
Sub 複数のシートの移動ユーザー配置()
    Dim UserRayout As Variant
    Dim i As Long
        UserRayout = Array("移動シートC", "移動シートB", "移動シートA")
        For i = 0 To 2
            Worksheets(UserRayout(i)).Move After:=Worksheets(Worksheets.Count)
        Next i
End Sub
vbasheetmovep006-1
矢印下001
vbasheetmovep008

別のエクセルBOOKへ移転

移動させるシートを新しく作成したエクセルBOOKに移転させることも、別の既にあるエクセルBOOKに移転させることも出来ます。

新規BOOKへ移転させる

移動させたいシートを新規のエクセルBOOKに移転させることが出来ます。

新規BOOKですので名前を付けて保存を行うことが必要です。

新規BOOKへ移転

Worksheetオブジェクト(移転させるシート).Move

VBA
Sub 新規BOOKへ移転()
    Worksheets("移動シート").Move
End Sub
vbasheetmovep001
矢印下001
vbasheetmovep009

既存のBOOKへ移転させる

移動させたいシートを既存のエクセルBOOKに移転させます。

既存のBOOKへ移転

ThisWorkBook.Worksheetオブジェクト(移転させるシート).Move Before := Workbooks(“Book2.xlsx”).Worksheets(1)

別のエクセルBOOKとの連携となりますので、シートを移転させるVBAコードには、「どこのシートを移動させるのか」を記述しておくようにしましょう。気付かないうちにBOOKのフォーカスが変わっていたらエラーストップしてしまいます。

VBA
Sub 既存BOOKへ移転()
    ThisWorkbook.Worksheets("移動シート").Move After:= _
                        Workbooks("Book2.xlsm").Worksheets("もくじ")
End Sub
vbasheetmovep010
矢印下001
vbasheetmovep011

既存のBOOKへ複数のシートを移転させる(ユーザーが配置)

Moveメソッドの中で、一番複雑なパターンになります。

既存のBOOKへ複数のシートを移転(ユーザーが配置)

移動させるシートをArray関数でまとめて、それぞれの要素を変数に格納して、別ブックを指定して一つづつ移転させていきます。

VBA
Sub 複数のシートの既存BOOKへの移動ユーザー配置()
    Dim UserRayout As Variant
    Dim i As Long
        UserRayout = Array("移動シートC", "移動シートB", "移動シートA")
        For i = 0 To 2
            ThisWorkbook.Worksheets(UserRayout(i)).Move _
                            After:=Workbooks("Book2.xlsm").Worksheets(Worksheets.Count)
        Next i
End Sub
vbasheetmovep012
矢印下001
vbasheetmovep013

まとめ

vbasheetmovep015

エクセルの作業で、増えてしまったシートを整理整頓するのにはシートの移動は欠かせない操作です。

さらに、シートを別のエクセルファイルに移転させることで、より最適なエクセルファイル資料作りが出来るようになります。

例えば、エクセルのテンプレートファイルで、テンプレートシートをコピーして記入したデータシートを、その項目をまとめたエクセルファイルに移転するとか・・

使い道は広いのではないでしょうか。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min