この記事ではFilter関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
Filter関数の使い方と注意点
Filter関数は、配列内の文字列を条件に応じて抽出して新しい配列として返す関数です。
特定の文字列を含む要素だけを取得したい場合に便利です。
構文
Filter(配列, 検索文字列, [一致], [比較])
- 配列 : 検索対象となる文字列の配列
- 検索文字列 : 配列の各要素に含まれるかどうかを判定する文字列
-
一致(省略可) :
Trueで「検索文字列を含む要素」を抽出、Falseで「含まない要素」を抽出。デフォルトはTrue -
比較(省略可) : 文字列比較方法
- vbBinaryCompare(大文字・小文字を区別、既定値)
- vbTextCompare(大文字・小文字を区別しない)
- 戻り値 : 条件に合致した文字列の配列(空の場合は空の配列)
使用例
文字列を含む要素を抽出
Sub Sample()
Dim DataArray As Variant
Dim ResultArray As Variant
DataArray = Array("きいろ", "あか", "みどり", "あお")
ResultArray = Filter(DataArray, "あ")
Dim i As Long
For i = LBound(ResultArray) To UBound(ResultArray)
Debug.Print ResultArray(i)
Next i
End Sub
▶ 出力結果
あか
あお
→ 配列内で「あ」を含む要素だけを抽出しています。
文字列を含まない要素を抽出
Sub Sample()
Dim DataArray As Variant
Dim ResultArray As Variant
DataArray = Array("きいろ", "あか", "みどり", "あお")
ResultArray = Filter(DataArray, "あ", False)
Dim i As Long
For i = LBound(ResultArray) To UBound(ResultArray)
Debug.Print ResultArray(i)
Next i
End Sub
▶ 出力結果
きいろ
みどり
→ 配列内で「あ」を含まない要素だけを抽出しています。
大文字・小文字を区別せずに検索
Sub Sample()
Dim DataArray As Variant
Dim ResultArray As Variant
DataArray = Array("excel", "EXCEL", "vba", "VBA")
ResultArray = Filter(DataArray, "excel", , vbTextCompare)
Dim i As Long
For i = LBound(ResultArray) To UBound(ResultArray)
Debug.Print ResultArray(i)
Next i
End Sub
▶ 出力結果
excel
EXCEL
→ vbTextCompareを使うことで大文字・小文字を区別せずに抽出できます。
大文字・小文字を区別して検索
Sub Sample()
Dim DataArray As Variant
Dim ResultArray As Variant
DataArray = Array("excel", "EXCEL", "vba", "VBA")
ResultArray = Filter(DataArray, "excel", , vbBinaryCompare)
Dim i As Long
For i = LBound(ResultArray) To UBound(ResultArray)
Debug.Print ResultArray(i)
Next i
End Sub
▶ 出力結果
excel
→ vbBinaryCompareを使うことで大文字・小文字を区別して抽出できます。
⚠️注意
Filter関数の戻り値は新しい配列
Filterで抽出しても元の配列はそのままです。
Sub Sample()
Dim DataArray As Variant
Dim ResultArray As Variant
DataArray = Array("きいろ", "あか", "みどり", "あお")
ResultArray = Filter(DataArray, "あ")
Debug.Print "元の配列: " & Join(DataArray, ", ")
Debug.Print "Filter結果: " & Join(ResultArray, ", ")
End Sub
▶ 出力結果
元の配列: きいろ, あか, みどり, あお
Filter結果: あか, あお
元の配列が空の場合、戻り値も空の配列
Sub Sample()
Dim DataArray As Variant
Dim ResultArray As Variant
Dim ResultCount As Long
DataArray = Array()
ResultArray = Filter(DataArray, "あ")
' 空配列かどうかを確認
If IsArray(ResultArray) Then
On Error Resume Next ' 空配列の場合 LBound/UBound がエラーになる
ResultCount = UBound(ResultArray) - LBound(ResultArray) + 1
If Err.Number <> 0 Then
ResultCount = 0
Err.Clear
End If
On Error GoTo 0
Else
ResultCount = 0
End If
Debug.Print "結果の要素数: " & ResultCount
End Sub
▶ 出力結果
結果の要素数: 0
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方