2011年12月4日日曜日

[ExcelVBA] Filter関数


■構文
Filter(sourcesrray, match[, include[, compare]])

■説明
検索対象(配列)と検索文字列を指定することでマッチした配列要素を配列に格納して返します。
マッチしなかった場合空の配列を返します。
第一引数:検索対象の配列を指定します。
第二引数:検索する文字列を指定します。
第三引数:(省略可能)検索にマッチしたデータを返すか、検索にマッチしなかったデータを返すか指定します。
True→マッチしたデータ。False→マッチしなかったデータ。省略時は、True
第四引数:(省略可能)文字列の比較モードを指定します。
定数説明
vbUseCompareOption-1Option Compareステートメントの設定を仕様して比較を行います
vbBinaryCompare0バイナリモードの比較を行います
vbTextCompare1テキストモードの比較を行います
vbDatabaseCompare2MicrosoftAccessの場合のみ有効。データベースに格納されている設定に基づいて比較を行います

■サンプルコード
Option Explicit

Sub SampleCode()
    Dim FoodList As Variant
    Dim SelectList As Variant
    Dim i As Integer
    
    'カテゴリ(果物or野菜or飲料)と食べ物がCSVでセットになった
    'データが格納されている配列があったとします。
    FoodList = Array("果物,りんご", "野菜,だいこん", "飲料,お茶", _
                     "果物,みかん", "野菜,ぴーまん", "飲料,お酒")

    
    
    '■果物だけ抽出してみる
    SelectList = Filter(FoodList, "果物")
    
    '結果を表示
    For i = 0 To UBound(SelectList)
        '果物,りんご
        '果物,みかん  が表示される
        Debug.Print SelectList(i)
    Next
    
    Debug.Print "---"
    
    
    
    '■野菜だけ抽出してみる
    SelectList = Filter(FoodList, "野菜")
    
    '結果を表示
    For i = 0 To UBound(SelectList)
        '野菜,だいこん
        '野菜,ぴーまん  が表示される
        Debug.Print SelectList(i)
    Next
    
    Debug.Print "---"
    
    
    
    '■飲料以外を抽出してみる(第三引数をFalse)
    SelectList = Filter(FoodList, "飲料", False)
    
    '結果を表示
    For i = 0 To UBound(SelectList)
        '果物,りんご
        '野菜,だいこん
        '果物,みかん
        '野菜,ぴーまん が表示される
        Debug.Print SelectList(i)
    Next


    '■マッチしない文字列の場合
    SelectList = Filter(FoodList, "定食")
    
    Debug.Print UBound(SelectList) '-1
End Sub

■サンプルコード
Option Explicit

Sub SampleCode2()
    Dim DataList As Variant
    Dim SelectList As Variant
    Dim i As Integer
    
    DataList = Array("aa", "aaa", "AA", "AAA")

    SelectList = Filter(DataList, "aa", True, vbBinaryCompare)
    For i = 0 To UBound(SelectList)
        'aa
        'aaa が表示される
        Debug.Print SelectList(i)
    Next
    
    
    Debug.Print "---"
    
    
    SelectList = Filter(DataList, "aa", True, vbTextCompare)
    For i = 0 To UBound(SelectList)
        'aa
        'aaa
        'AA
        'AAA が表示される
        Debug.Print SelectList(i)
    Next
End Sub

0 件のコメント: