shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】シート名の配列から完全一致と部分一致の確認サンプル

ExcelのVBAで、指定した文字が配列の要素の中に存在するかを確認する方法について、シート名の配列で実施するサンプルです。

事例として、選択したシートの名前を配列に格納し、その配列内で指定した名前の完全一致と部分一致を確認します。

 

VBAサンプル

現在選択しているシートのコレクションを取得し、シートの名前を配列に格納、完全一致と部分一致を関数を使用して確認しています。

事例では、"Sheet1"という名前があるかを

Sub 指定した名前が選択したシート内に存在するか確認()

    Dim 選択シート As Sheets
    Dim シート  As Object
    Dim i As Long
    Dim シート名リスト()

    Set 選択シート = ActiveWindow.SelectedSheets
          
    ReDim Preserve シート名リスト(選択シート.Count - 1) '配列のインデックスが 0 からなので1引いている'

    '配列に格納'
    For Each シート In 選択シート
      シート名リスト(i) = シート.Name
      i = i + 1
    Next
    
    '以下、完全一致と部分一致の有無を表示するサンプルです。"Sheet1"という名前を検索しています'
    MsgBox "完全一致あり: " & 完全一致の確認(シート名リスト, "Sheet1")
    MsgBox "部分一致あり: " & 部分一致の確認(シート名リスト, "Sheet1")
    
End Sub

Function 完全一致の確認(確認するリスト As Variant, 確認テキスト As String) As Boolean
    Dim k As Long
    For k = LBound(確認するリスト) To UBound(確認するリスト)
        If 確認するリスト(k) = 確認テキスト Then
            完全一致の確認 = True
            Exit Function
        End If
    Next
    
    完全一致の確認 = False'一致がみつからなかったので'
End Function

Function 部分一致の確認(確認するリスト As Variant, 確認テキスト As String) As Boolean
    Dim 一致リスト As Variant
    一致リスト = Filter(確認するリスト, 確認テキスト)
    
    If UBound(一致リスト) = -1 Then'要素がない場合は-1'
        部分一致の確認 = False
    Else
        部分一致の確認 = True
    End If
End Function

補足説明

  •  ReDim Preserve の部分は、配列の要素数に応じて可変しています。配列のインデックスを「Option Base 1」で1から始めている場合は、1を引かない。
  • 部分一致の確認は、InStr 関数やLike演算子でも可能ですが、VBAのFilter関数を利用した事例です。

    learn.microsoft.com

以上、ExcelのVBAで、指定した文字が配列の要素の中に存在するかを確認する方法について、シート名の配列で実施するサンプルでした。