【VBA】指定した文字列を含むワークシートを全て抽出する

エクセルVBAで使用するコードの備忘録。VBAで指定した文字列を含むワークシートを全て抽出して配列に格納するコード。

スポンサーリンク

全てのワークシート名を取得する

ワークブックに含まれるすべてのワークーシート名を取得するには、「Workbook」オブジェクト下にある「Worksheets」オブジェクトを参照します。「Worksheets」オブジェクトには含まれるすべての各ワークシートに関連した情報が格納されており、「Name」プロパティからワークシート名を取得できます。

指定した文字列を含むワークシートのみ抽出するには、すべてのワークシートのNameプロパティから得られたワークシート名それぞれに対して、InStr関数を用いて指定文字列が含まれるかどうかをチェックしてやればOKです。

サンプルコード

VBAを書いているワークブックについて指定文字列を含むワークシートを抽出するコードです。指定文字列が見つかる度に配列サイズを再設定してワークシート名を配列に格納しています。配列サイズの再設定時にはすでに含まれている値を引き継げるように「Preserve」を指定するのを忘れいないようにしましょう。

なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

指定文字列を含むワークシートを抽出(ThisWorkbook)

'--- 指定文字列を含むワークシートを取得 ---'
Public Sub GetSelectedWsNames()
    
    '--- 指定文字列 ---'
    Dim str As String
    str = "[含まれるか判定したい文字列]"
    
    '--- ワークシート名を格納する変数 ---'
    Dim wsNames() As String
    
    '--- 全てのワークシートでループ ---'
    Dim i As Long
    i = 0
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets

        '--- 文字列が含まれれば配列に格納 ---'
        If (InStr(ws.Name, str)) Then
            i = i + 1
            ReDim Preserve wsNames(1 To i)
            wsNames(i) = ws.Name
            
        End If
    
    Next ws
    
End Sub