エクセルマクロ(EXCEL VBA)

エクセルマクロ(EXCEL VBA) その10 複数のシートを使う方法

複数のシートを使う方法

これまでは一つのシートに限ってマクロを作ってきました。
今回は、複数のシートをまたいだ作業をマクロさんにやってもらいましょう。

こういう「劇場リスト」があったとします。

劇場リストのシート

リストは、「劇場リスト」というシートに書かれていて、もう一つある「整理」というリストはまだ白紙の状態です。
この「劇場リスト」を元にして、マクロを使って「整理」シートに情報をコピペしてみましょう。

まず、「整理」のA1セルを狙ってマクロを書き始めましょう。

A1を指定するには
Cells(1, 1)とすればよかったですよね。

開発→Visual Basic
挿入→標準モジュールとして枠を出してから、

Sub sheet_matagu()
Cells(1, 1) = "ここはA1"
End Sub

としましょう。
※マクロの始め方についてはその2で詳しく説明していますので、ご参照ください。

ここはA1

これを実行すると

整理のシートでA1を指定

と、なります。

ここで、「整理」のシートを開いていた方はこれで良かったんですが、たまたま「劇場リスト」のシートを開いて実行した方は、

劇場が変更されてしまった

A1に「劇場」と書いてあったものが「ここはA1」という文字に上書きされてしまっていると思います。
今は、実験用のデータだからまあいいとしても、大切なデータが上書きされてしまったら大変ですよね。
しかも、マクロで上書きされたデータはCtrl+Zや、やり直しコマンドで戻ることができません。ということで、とても危険なのでシートをちゃんと指定する方法を使いましょう。

どのシートのどのセル、というところまで指定すれば間違いがなくなるわけなので、

Sheets("整理").Cells(1, 1) = "ここはA1"

と、マクロを修正してください。

シートの指定

これで厳密に住所を指定できたので、「劇場リスト」を開いた状態でマクロを実行しても、ちゃんと「整理」のシートのA1に「ここはA1」という文字が入ると思います。
念のため試してみてください。

劇場リストを元に情報を整理する

では続いて、「整理」シートのA1には、帝国劇場と入るように指定してみましょう。
ここまで読んでこられた方はもうきっとできると思いますので、挑戦してみてください。

 
どうでしょう。

 

Sheets("整理").Cells(1, 1) = Sheets("劇場リスト").Cells(3, 1)

ですね。

シートをまたぐ式

これを実行すると、「整理」シートのA1に「帝国劇場」と入れることができました。

では、続いて
A2に「日比谷」
A3に「1897」
A4に「https://www.toho.co.jp/stage/teigeki/index.php」が入るように仕掛けてみてください。

今のマクロの命令をコピペして、少し書き換えるとできそうですね。

 
こういうことですね。

Sub sheet_matagu()
Sheets("整理").Cells(1, 1) = Sheets("劇場リスト").Cells(3, 1)
Sheets("整理").Cells(2, 1) = Sheets("劇場リスト").Cells(3, 2)
Sheets("整理").Cells(3, 1) = Sheets("劇場リスト").Cells(3, 3)
Sheets("整理").Cells(4, 1) = Sheets("劇場リスト").Cells(3, 4)
End Sub

リストを追加

これを実行すると

帝劇の情報が取り出せた

うまいこと、帝劇の情報を縦向けに取り出すことができました!

 
と、ここまで書いてくると、これって規則性があるな・・・、と思われたかもしれません。
そうです。For Nextを使うと、もうちょっとスッキリさせることができそうですね。

for nextでスッキリ

マクロの1, 2, 3, 4と続いているところを i で置き換えて、For Nextで繰り返してもらいました。
i が右辺にも左辺にも登場するのが、これまで無かったところですね。
これで実行してもちゃんと同じ結果になりました。

ということで今回はSheetを指定するやり方について説明しました。
2つ以上シートがある場合は指定しておくと安全です。

次は、変数についてご紹介します。

 
今回の最終的なコード

Sub sheet_matagu()
For i = 1 To 4
    Sheets("整理").Cells(i, 1) = Sheets("劇場リスト").Cells(3, i)
Next
End Sub

 

宿題-10

「演劇」「舞台」「芝居」「公演」という4つのシートを作って、芝居シートのC4に「劇団」と入れるマクロを作ってください。

 

エクセルマクロ(EXCEL VBA) その11 変数について

(文:森脇孝/エントレ)

関連記事一覧