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

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

ワークシートをループさせて特定のシートだけ処理をする、っていうのを書く場合。もともとWorksheetsコレクションというのがあるので、それを使うことが多かったんですが、総数が多くて該当シートが少ないときなんか、こう書いてみたらどうかなーって思ったのがあったのでメモ的に。


全シートをループしながら該当シートをIfで分岐

Worksheetsコレクションを使ってすべてのシートをループさせて…、っていうよくある形。もちろんこれでも動くけど、シートの総数が多くて該当シートが少ない場合、なんか無駄が多いような…、と。

Collectionに該当シートを格納しておいてループ

コレクションを自分で作って、該当のシートを格納しておいて、そのコレクションをループさせちゃう。こっちのほうがスマートなんじゃないかなー。

追記:配列で指定してループ

thom神からのお導きがありました。こっちのほうが楽!!!

公開日:2017/06/20
更新日:2017/06/21

4件のコメント

  1. thom より:

    *youさん
    Array使うと便利ですよ。

    • *you より:

      thomさん

      Arra—y!!! マジだ! こっちのが記述が少なく済んでいいですね! ありがとうございます、あとで本文追記させてもらいますー(*´Д`)

    • denden より:

      コメント失礼いたします。
      こちらの方法を試したのですが、インデックスが有効範囲にありませんというエラーが発生してしまいます。
      どのようにしたら解決できるんでしょうか?

      <エラー発生個所>
      For Each ws In Worksheets(Array(“Sheet1”, “Sheet3”, “Sheet5”))

      <当方の環境>
      Excelのバージョン不明
      Office365 proplusの製品です。おそらく最新の2016同等かと思います。

    • *you より:

      dendenさん、コメントありがとうございます。

      Sheet1, Sheet3などの、指定している名前のシートが存在していないのではないでしょうか?


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)