MicroSoft の解説
MicroSoft のホームページ Learn > Office VBA リファレンス > Excel > 概念 > ブックとワーク の中の「複数のシートを参照する」の解説によりますと
複数のシートを同時に指定するには、 Array 関数を使います。
とあります。
そして次のコードが掲載されています。
Sub Several() Worksheets(Array("Sheet1", "Sheet2", "Sheet4")).Select End Sub
このようにできれば次のようにもできます。
Sub Several1() Dim Target As Variant Target = Array("Sheet1", "Sheet2", "Sheet4") Worksheets(Target).Select End Sub
データがある複数のシートの選択
考えの方向は、前のコードの配列「 Target 」にデータがあるシートの名前を格納する方法を検討することになります。
シートの設定
シート「 sheet1 」「 sheet3 」「 sheet4 」のセル「 A1 」に 1 をセットし、他のシートには何もセットしていません。
この設定で、シート「 sheet1 」のセルをダブルクリックしてみます。
想定とおりシート「 sheet1 」「 sheet3 」「 sheet4 」が選択状態になりました。
シート「Sheet1」のコード
コードは、シート「 sheet1 」にVBエディターで次のコードを書いています。
Option Explicit '--------------------------------------- ' Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) Call Several2 End Sub '--------------------------------------- ' Sub Several2() Dim Sh As Worksheet Dim iCount As Long Dim Target() As Variant 'データがあるシートの名前を格納します。 'とりあえずシートの数だけ確保 ReDim Target(Worksheets.Count - 1) For Each Sh In Worksheets 'データの有無の判定 'この例のシートでは UsedRange 左上のトップで判定しています。 If Sh.UsedRange.Cells(1, 1) <> "" Then Target(iCount) = Sh.Name iCount = iCount + 1 End If Next Sh If iCount > 0 Then '余分な配列の除去 ReDim Preserve Target(iCount - 1) 'シートの一括選択 Worksheets(Target).Select End If End Sub
データなしの定義
使用範囲の取得に UsedRange を使っていますが、取得する範囲は表面上「空」の状態でも計算式のあるセルも含みますので、どういう状態をデータがないと定義するかにかかわります。
したがって、データがない判定は書式など状況に応じて決める必要があります。