2011年12月4日日曜日

[ExcelVBA] Filter関数


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

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

■サンプルコード
  1. Option Explicit  
  2.   
  3. Sub SampleCode()  
  4.     Dim FoodList As Variant  
  5.     Dim SelectList As Variant  
  6.     Dim i As Integer  
  7.       
  8.     'カテゴリ(果物or野菜or飲料)と食べ物がCSVでセットになった  
  9.     'データが格納されている配列があったとします。  
  10.     FoodList = Array("果物,りんご""野菜,だいこん""飲料,お茶", _  
  11.                      "果物,みかん""野菜,ぴーまん""飲料,お酒")  
  12.   
  13.       
  14.       
  15.     '■果物だけ抽出してみる  
  16.     SelectList = Filter(FoodList, "果物")  
  17.       
  18.     '結果を表示  
  19.     For i = 0 To UBound(SelectList)  
  20.         '果物,りんご  
  21.         '果物,みかん  が表示される  
  22.         Debug.Print SelectList(i)  
  23.     Next  
  24.       
  25.     Debug.Print "---"  
  26.       
  27.       
  28.       
  29.     '■野菜だけ抽出してみる  
  30.     SelectList = Filter(FoodList, "野菜")  
  31.       
  32.     '結果を表示  
  33.     For i = 0 To UBound(SelectList)  
  34.         '野菜,だいこん  
  35.         '野菜,ぴーまん  が表示される  
  36.         Debug.Print SelectList(i)  
  37.     Next  
  38.       
  39.     Debug.Print "---"  
  40.       
  41.       
  42.       
  43.     '■飲料以外を抽出してみる(第三引数をFalse)  
  44.     SelectList = Filter(FoodList, "飲料"False)  
  45.       
  46.     '結果を表示  
  47.     For i = 0 To UBound(SelectList)  
  48.         '果物,りんご  
  49.         '野菜,だいこん  
  50.         '果物,みかん  
  51.         '野菜,ぴーまん が表示される  
  52.         Debug.Print SelectList(i)  
  53.     Next  
  54.   
  55.   
  56.     '■マッチしない文字列の場合  
  57.     SelectList = Filter(FoodList, "定食")  
  58.       
  59.     Debug.Print UBound(SelectList) '-1  
  60. End Sub  

■サンプルコード
  1. Option Explicit  
  2.   
  3. Sub SampleCode2()  
  4.     Dim DataList As Variant  
  5.     Dim SelectList As Variant  
  6.     Dim i As Integer  
  7.       
  8.     DataList = Array("aa""aaa""AA""AAA")  
  9.   
  10.     SelectList = Filter(DataList, "aa"True, vbBinaryCompare)  
  11.     For i = 0 To UBound(SelectList)  
  12.         'aa  
  13.         'aaa が表示される  
  14.         Debug.Print SelectList(i)  
  15.     Next  
  16.       
  17.       
  18.     Debug.Print "---"  
  19.       
  20.       
  21.     SelectList = Filter(DataList, "aa"True, vbTextCompare)  
  22.     For i = 0 To UBound(SelectList)  
  23.         'aa  
  24.         'aaa  
  25.         'AA  
  26.         'AAA が表示される  
  27.         Debug.Print SelectList(i)  
  28.     Next  
  29. End Sub  

0 件のコメント: