複数のシートを使う方法
これまでは一つのシートに限ってマクロを作ってきました。
今回は、複数のシートをまたいだ作業をマクロさんにやってもらいましょう。
こういう「劇場リスト」があったとします。
リストは、「劇場リスト」というシートに書かれていて、もう一つある「整理」というリストはまだ白紙の状態です。
この「劇場リスト」を元にして、マクロを使って「整理」シートに情報をコピペしてみましょう。
まず、「整理」のA1セルを狙ってマクロを書き始めましょう。
A1を指定するには
Cells(1, 1)とすればよかったですよね。
開発→Visual Basic
挿入→標準モジュールとして枠を出してから、
Sub sheet_matagu()
Cells(1, 1) = "ここはA1"
End Sub
としましょう。
※マクロの始め方についてはその2で詳しく説明していますので、ご参照ください。
これを実行すると
と、なります。
ここで、「整理」のシートを開いていた方はこれで良かったんですが、たまたま「劇場リスト」のシートを開いて実行した方は、
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を使うと、もうちょっとスッキリさせることができそうですね。
マクロの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に「劇団」と入れるマクロを作ってください。
解説
まず、現在のアクティブシートの名前を「演劇」にしましょう。
シートの名前の変更はNameのプロパティを変更します。
ActiveSheet.Name = "演劇"
続いて、新規シートこの演劇シートの後ろに作り、名前を付けます。
新規シートを作るには、Worksheets.Add と書きます。
演劇シートの後ろに増やしたいので、after:=ActiveSheet とします。
Worksheets.Add after:=ActiveSheet
ActiveSheet.Name = "舞台"
同様に、芝居シート、公演シートも作ります。
その後に、芝居シートのC4に「劇団」と入れればいいので、
Sheets("芝居").Cells(4, 3) = "劇団"
と書き足せば完成です。
最終的なコードはこちらです。
Sub sheet_add()
'最初のシートに「演劇」と名前を付ける
ActiveSheet.Name = "演劇"
'新規シートを作成し、名前を付ける
Worksheets.Add after:=ActiveSheet
ActiveSheet.Name = "舞台"
Worksheets.Add after:=ActiveSheet
ActiveSheet.Name = "芝居"
Worksheets.Add after:=ActiveSheet
ActiveSheet.Name = "公演"
'芝居シートのC4に劇団と入れる
Sheets("芝居").Cells(4, 3) = "劇団"
End Sub
エクセルマクロ(EXCEL VBA) その11 変数について
(文:森脇孝/エントレ)