ExcelVBAでワークシートのループに自作Collectionや配列を使ってみる

ワークシートをループさせて特定のシートだけ処理をする、っていうのを書く場合。もともとWorksheetsコレクションというのがあるので、それを使うことが多かったんですが、総数が多くて該当シートが少ないときなんか、こう書いてみたらどうかなーって思ったのがあったのでメモ的に。
全シートをループしながら該当シートをIfで分岐
1 2 3 4 5 6 7 8 9 10 |
Sub sample1() Dim tgtSheet As Worksheet For Each tgtSheet In Worksheets 'ブック内の全てのシートをループ If tgtSheet.Name = "aaa" Or _ tgtSheet.Name = "bbb" Or _ tgtSheet.Name = "ccc" Then '特定の名前のシート名だったら '処理 End If Next End Sub |
Worksheetsコレクションを使ってすべてのシートをループさせて…、っていうよくある形。もちろんこれでも動くけど、シートの総数が多くて該当シートが少ない場合、なんか無駄が多いような…、と。
Collectionに該当シートを格納しておいてループ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub sample2() Dim wsCollection As Collection 'コレクションを宣言 Set wsCollection = New Collection '生成 wsCollection.Add Sheets("aaa") 'シートを追加 wsCollection.Add Sheets("bbb") wsCollection.Add Sheets("ccc") Dim tgtSheet As Worksheet For Each tgtSheet In wsCollection 'コレクションをループ '処理 Next Set wsCollection = Nothing '破棄 End Sub |
コレクションを自分で作って、該当のシートを格納しておいて、そのコレクションをループさせちゃう。こっちのほうがスマートなんじゃないかなー。
追記:配列で指定してループ
1 2 3 4 5 6 |
Sub sample3() Dim tgtSheet As Worksheet For Each tgtSheet In Worksheets(Array("aaa", "bbb", "ccc")) 'ブック内の特定の名前のシートをループ '処理 Next End Sub |
thom神からのお導きがありました。こっちのほうが楽!!!
ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。

2件のコメント
*youさん
Array使うと便利ですよ。
thomさん
Arra—y!!! マジだ! こっちのが記述が少なく済んでいいですね! ありがとうございます、あとで本文追記させてもらいますー(*´Д`)
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)