データベースのレコードを指定した条件で抽出する
Filter プロパティ
【書式】
object.Filter = Condition
引数・戻り値
- object ・・・ 対象となる Recordset オブジェクトを指定します。
- Condition ・・・ 抽出する条件式を文字列型(String)で指定します。条件式は、”(二重引用符)で囲みます。
条件式は、FieldName Operator Value という形式からなる節で構成されます。
複数の条件式を And や Or を使って連結することができます。- FieldName ・・・Recordset から有効な列名(フィールド名)を指定します。フィールド名に空白文字が含まれる場合は [](角括弧)で囲む必要があります。
- Operator ・・・比較演算子( >、<、<=、および like 演算子 )を指定します。
- Value ・・・FieldName と比較する値を指定します。値には、文字列、数値、日付を使用できます。文字列は、’(単一引用符)で囲みます(user = ‘Rin’)。日付の値は、#(シャープ記号)で囲みます(sdate > #7/22/17#)。数値の場合は、小数点、指数表記を使用できます。また、like 演算子には、ワイルドカードを使用することができます。ワイルドカードには、アスタリスク(*)およびパーセント記号(%)のみで、必ず文字列の末尾に使用します。例えば、「keyword like ‘k*’」、「keyword like ‘*ba*’」のように文字列の末尾または文字列の先頭と末尾に * や % を使用して検索します。ただし「keyword like ‘*ea’」、「keyword like ‘a*c’」のように文字列の先頭や文字列中に * や % を使用することはできません。この場合はエラーが発生します。また、Value に Null を指定することはできません。
Filter を解除するには、Filter プロパティに、定数 adFilterNone(0)を設定します。これは、Filter プロパティに、長さ 0 の文字列(””)を設定した場合と同じ結果が得られます。
rs.Filter = adFilterNone
rs.Filter = “”
※ rs は、Recordset オブジェクト
Filter プロパティを設定すると Recordset 内のレコードで、フィルタ処理済みのサブセット内の最初のレコードにカレントレコードの位置が移動します。また、Filter プロパティを消去すると、カレントレコードの位置は Recordset の最初のレコードに移動します。
Filter プロパティ 使用例
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Sub Sample_Filter() '参照設定:Microsoft ActiveX Data Objects 6.1 Library Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim constr As String Dim DBFile As String Dim i As Long Dim j As Long DBFile = ActiveWorkbook.Path & "\mydb1.accdb" constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBFile Set cn = New ADODB.Connection cn.ConnectionString = constr cn.Open Set rs = New ADODB.Recordset With rs 'テーブルを開く .Source = "テーブル3" .ActiveConnection = cn .Filter = "年度 = 2009 AND 月度 = 7 AND 取引先 like '%㈱%'" .Open End With With Worksheets("Sheet1") rs.MoveFirst i = 1 .Cells.Clear Do Until rs.EOF For j = 0 To rs.Fields.Count - 1 If i = 1 Then .Cells(i, j + 1) = rs(j).Name .Cells(i + 1, j + 1) = rs(j).Value Next j rs.MoveNext i = i + 1 Loop .Columns("A:H").AutoFit End With rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub |