サイトアイコン エントレ|演劇動画ニュース

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

エクセルマクロ(EXCEL VBA)

複数のシートを使う方法

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

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

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

まず、「整理」の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 変数について

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

モバイルバージョンを終了