配列myStに表示されているシートの左から指定番号のシート名を格納します。
St_noに取得したい番号(表示されている左からn番目のシート番号)を指定してください。
最下のコードでは1,2,4番目の表示されているシートを取得してmyStに格納します。
Sheet1~Sheet10のうち、奇数シートが非表示設定の場合、以下が格納されます。
mySt(0) = Sheet2
mySt(1) = Sheet4
mySt(2) = Sheet8
Sheets(mySt).Selectなどでシート選択できるように文字列配列に格納していますが、
取り扱いやすいようにオブジェクト変数として扱うには以下を変更してください。
① Dim mySt() As String
↓
Dim mySt() As Worksheet
② mySt(nxSt) = Worksheets(i).Name
↓
Set mySt(nxSt) = Worksheets(i)
上記例で、非表示5シート、表示5シートであるにもかかわらずSt_noに
1,2,4,6を指定した場合の6は無視されて1,2,4番目の表示シートが格納されます。
■VBAコード
Sub sample()
Dim mySt() As String, St_no() As Variant
Dim i As Integer, cnt As Integer, nxSt As Integer
'配列へ格納するシートの番号を指定
St_no = Array(1, 2, 4)
For i = 1 To Worksheets.Count
If Worksheets(i).Visible Then
cnt = cnt + 1
If St_no(nxSt) = cnt Then
ReDim Preserve mySt(nxSt + 1)
mySt(nxSt) = Worksheets(i).Name
nxSt = nxSt + 1
End If
End If
If UBound(St_no) < nxSt Then Exit For
Next i
ReDim Preserve mySt(nxSt - 1)
'格納された配列を表示
For i = 0 To UBound(mySt)
Debug.Print mySt(i)
Next i
End Sub
お礼
ありがとうございます。 実質1行ですね。