0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Excel VBA】Filter関数|配列から条件に合う要素を抽出する方法と注意点

Last updated at Posted at 2025-09-02

この記事では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でよく使う関数一覧&基本の使い方

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?