エクセルVBAでシートの移動や移転についての記述方法を説明します。
移動と移転にはMoveメソッドを使用します。
シート整理では必要なスキルですので使い慣れておきましょう。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルシートの並び順は変更することが出来ます。マウス操作では、シートタブをドラッグドロップで簡単に移動させることが出来ます。
では,
このような移動をVBAではどのように記述すればよいのでしょうか?
今回は、このシートの移動のVBAについて説明して行きます。
- シートの知識
- シートの存在を確認する2種類のコードと実務での例題
- シートクリアーを目的のメソッド別にVBA最速理解
- シートのコピーを最速に理解!VBAコードで異なる結果
- Excelシートを追加・挿入するAddメソッドの使い方
- シートの選択・指定方法とその意味。簡単でも軽視してはダメ
- エクセルシートの名付け・変更と取得そして一覧化するコード
- ワークシートのブック内移動と新規ブックへの移転を分かりやすく
- エクセルシートの並び順が思い通り!シート名一覧で自由自在
- Excelシートを保護する。 記述方法とプロテクトされない操作
- エクセルシートを削除する。Deleteの使い方と注意ポイント
- エクセルシートの非表示コードをパスワード管理するVBA
- ワークシートを変数化する3つの手法 オブジェクト変数など
コンテンツ
シートを移動・移転させる
シートの移動にはいくつかのパターンがあります。
それぞれのパターンの説明について、分類分けを行っていますので、次の見出しから項目に飛ぶことが出来ます。
- エクセルBOOK内移動
- 別のエクセルBOOKへ移転
シートの移動と移転には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)
Sub シートタブの先頭()
Worksheets("移動シート").Move before:=Worksheets(1)
End Sub
シートを最後(一番右端)に移動させたい時は、今ある最後のシート名 例えばSheet3とか の後というコードの記述で指定してあげます。
Worksheets(“移動シート”).Move After := Worksheets(“Sheet3”) とか
これも先ほどの先頭の場合と同じで、最後のシート名が明らかでない場合は、このコード記述を使うことが出来ません。
従って、この場合も、シートのインデックス番号を利用して最後のシートを指定する方法を覚えておきましょう。
Worksheetオブジェクト(移動させるシート).Move After := Worksheets(Worksheets.Count)
Sub シートタブの最後()
Worksheets("移動シート").Move after:=Worksheets(Worksheets.Count)
End Sub
指定するシートの手前(左)に移動させたい時はBeforeを使って場所を記述します。
この移動のケースでは、指定するシート名が分かっている場合も多いので、直接シート名を指定することが多いです。
シートを移動させるときに、シートタブの途中(〇〇シートと△△シートの間)に移動の場合は、可能であれば出来るだけ移動の基準点となる指定シートはシート名で指定する様にしたいです。
エクセルBOOK内でのシート枚数やシート位置が変わる環境下では、シートのインデックス番号の特定方法については少々面倒です。
両端のシートの位置指定以外は、、指定シートのインデックス番号を取得するために、そのシート名を使って位置を調べるという何とも2度手間的な煩わしそうな作業が必要になります。
Worksheetオブジェクト(移動させるシート).Move Before := Worksheets(指定シート名)
Sub シートタブの指定シートの前()
Worksheets("移動シート").Move Before:=Worksheets("Sheet3")
End Sub
指定するシートの後(右)に移動させたい時はAfterを使って場所を記述します。
この移動のケースでは、Before同様、指定するシート名が分かっている場合も多いので、直接シート名を指定することが多いです。
Worksheetオブジェクト(移動させるシート).Move After := Worksheets(指定シート名)
Sub シートタブの指定シートの後()
Worksheets("移動シート").Move After:=Worksheets("Sheet2")
End Sub
移動させるシートが複数ある場合はまとめて移動させることが出来ます。
Array関数を利用すると移動させたいシートをまとめることが出来ます。
Array・LBound・RBoundの配列関数と各ステートメントを最速理解Worksheetオブジェクト(Array(移動させるシート1,移動させるシート2・・)).Move Before := Worksheets(指定シート名)
この方法は、Arrayでまとめて指定したシートを、エクセルが自動で配置順序を決めて並べていきます。
Array(“移動シートA”, “移動シートB”, “移動シートC”)を、Array(“移動シートC”, “移動シートB”, “移動シートA”)と記述してもVBAコード実行後は同じ以下のようになります。
Sub 複数のシートの移動()
Worksheets(Array("移動シートA", "移動シートB", "移動シートC")) _
.Move After:=Worksheets(Worksheets.Count)
End Sub
シートを移動させる目的は、ユーザーが設置したい位置にシートを置くために移動させることでしょう。
複数のシートをまとめて移動させるとエクセルが自動配置してしまうため、逆に面倒なこともあるでしょう。
では、最初からユーザーが考える順でシートを移動させるためには、VBAコード記述にも工夫が必要になります。
For~Nextのループと入れ子構造をVBA最速理解Array関数を使って配列をバリアント型変数に格納し順番に移動させる。
変数 = Array(“移動シートC”, “移動シートB”, “移動シートA”)
Worksheets(変数()).Move After:=Worksheets(Worksheets.Count)
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
別のエクセルBOOKへ移転
移動させるシートを新しく作成したエクセルBOOKに移転させることも、別の既にあるエクセルBOOKに移転させることも出来ます。
移動させたいシートを新規のエクセルBOOKに移転させることが出来ます。
新規BOOKですので名前を付けて保存を行うことが必要です。
Worksheetオブジェクト(移転させるシート).Move
Sub 新規BOOKへ移転()
Worksheets("移動シート").Move
End Sub
移動させたいシートを既存のエクセルBOOKに移転させます。
ThisWorkBook.Worksheetオブジェクト(移転させるシート).Move Before := Workbooks(“Book2.xlsx”).Worksheets(1)
別のエクセルBOOKとの連携となりますので、シートを移転させるVBAコードには、「どこのシートを移動させるのか」を記述しておくようにしましょう。気付かないうちにBOOKのフォーカスが変わっていたらエラーストップしてしまいます。
Sub 既存BOOKへ移転()
ThisWorkbook.Worksheets("移動シート").Move After:= _
Workbooks("Book2.xlsm").Worksheets("もくじ")
End Sub
Moveメソッドの中で、一番複雑なパターンになります。
移動させるシートをArray関数でまとめて、それぞれの要素を変数に格納して、別ブックを指定して一つづつ移転させていきます。
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
まとめ
エクセルの作業で、増えてしまったシートを整理整頓するのにはシートの移動は欠かせない操作です。
さらに、シートを別のエクセルファイルに移転させることで、より最適なエクセルファイル資料作りが出来るようになります。
例えば、エクセルのテンプレートファイルで、テンプレートシートをコピーして記入したデータシートを、その項目をまとめたエクセルファイルに移転するとか・・
使い道は広いのではないでしょうか。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。