Excel VBA ADOで複数の条件式でレコードを検索して抽出する

スポンサーリンク

複数の条件式でレコードを検索して抽出する方法

複数のフィールドによる条件式でレコードを検索するには、Recordset【レコードセット】オブジェクトFilter【フィルター】プロパティを使用します。

Recordset.Filter【レコードセットフィルター】プロパティ

Recordset.Filter【レコードセットフィルター】プロパティの書式と設定値の説明

[]内は省略可能です。
オブジェクト変数.Filter = 検索文字列

  • オブジェクト変数(必須)
    Recordset【レコードセット】オブジェクトのインスタンスが格納されているオブジェクト変数を指定します。
  • 検索文字列(必須)
    検索文字列は全体を「”」ダブルクォーテーションで囲みます。検索文字列の指定方法は検索フィールドのデータ型によってかわります。

    データ型 指定方法
    文字列型 検索値を「’」シングルクォーテーションで囲みます
    日付型 検索値を「#」シャープ記号で囲みます
    数値型 検索値をそのまま指定します。

    検索文字列では以下の比較演算子が使用できます。

    使用できる比較演算子
    比較演算子 内容 使用例
    < より小さい <5 (5より小さい 5は含まない)
    <= 以下 <=5 (5以下 5を含む)
    > より大きい >5 (5より大きい 5は含まない)
    >= 以上 >=5 (5以上 5を含む)
    = 等しい =5 (5と等しい)
    <> 等しくない <>5 (5と等しくない)
    Like パターンマッチング “Like ‘山田*'”(苗字が山田をすべて)

    ※Like【ライク】演算子の場合は「0文字以上の文字列」を表すワイルドカードの「*」アスタリスクが文字列の前後に使用できます。


    検索条件が複数の場合は以下の論理演算子が使用できます。

    論理演算子 書式 内容
    And 条件1 And 条件2 条件1を満たし条件2を満たす
    Or 条件1 Or 条件2 条件1を満たすか条件2を満たす

    And論理演算子の場合は()で条件をグループ化することができます。例として
    “(フィールド=’条件1′ And フィールド=’条件2′) Or (フィールド=’条件3′ And フィールド=’条件4′)”
    内容は
    (条件1を満たし条件2を満たす)または(条件3を満たし条件4を満たす)を表します。


    条件に変数を使用する場合の書式
    (例)条件が文字列の場合 ”フィールド = ‘ “& 変数名 &” ‘”
    (例)条件が数値型の場合 ”フィールド >” & 変数名
    (例)条件が日付型の場合 ”フィールド= # ” & 変数名 & “#”



Accessデータベースの第一四半期売上テーブルから
5月の売上データを抽出する例

コードと解説

ADOのライブラリファイルへの参照設定がされていることが前提のコード例です。

Sub 複数条件の検索3()
Dim コネクション As New ADODB.Connection
Dim レコード As New ADODB.Recordset
コネクション.Open ConnectionString:= _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:¥Users¥Desktop¥Database2.accdb;"
レコード.Open Source:="第一四半期売上", ActiveConnection:=コネクション, _
CursorType:=adOpenStatic
レコード.Filter = "売上日>=#2017/5/1# And 売上日<=#2017/5/31#"
Range("A1").CopyFromRecordset Data:=レコード
レコード.Close: Set レコード = Nothing
コネクション.Close: Set コネクション = Nothing
End Sub
2行目【Dim コネクション As New ADODB.Connection】
Dim【デム】ステートメントでNew【ニュー】キーワード使用して外部データベースとの接続を確立するConnection【コネクション】オブジェクトのインスタンスを生成してオブジェクト変数「コネクション」に格納します。


3行目【Dim レコード As New ADODB.Recordset】
Dim【デム】ステートメントでNew【ニュー】キーワード使用して外部データベースのレコードを参照するRecordset【レコードセット】オブジェクトのインスタンスを生成してオブジェクト変数「レコード」に格納します。


4行目~6行目【コネクション.Open ConnectionString:= _
“Provider=Microsoft.ACE.OLEDB.12.0;” & _
“Data Source=C:¥Users¥Desktop¥Database2.accdb;”】

Connection【コネクション】オブジェクトのOpen【オープン】メソッドを使用して外部データベースの接続をします。


7行目~8行目【レコード.Open Source:=”第一四半期売上”, ActiveConnection:=コネクション, _
CursorType:=adOpenStatic】

Recordset【レコードセット】オブジェクトのOpen【オープン】メソッドを使用して外部データベースのレコードを参照します。引数CursorType【カーソルタイプ】をデータの検索やレポートを作成するときに指定するadOpenStatic【スターティック】で静的タイプに指定します。


9行目【レコード.Filter = “売上日>=#2017/5/1# And 売上日<=#2017/5/31#”】
Recordset【レコードセット】オブジェクトのFilter【フィルター】プロパティを使用して抽出するデータを「検索文字列」で指定します。検索条件は売上日フィールドの2017/5/1以上で2017/5/31以内です。


10行目【Range(“A1”).CopyFromRecordset Data:=レコード】
Range【レンジ】オブジェクトのCopyFromRecordset【コピーフロームレコードセット】メソッドを使用して、Recordset【レコードセット】オブジェクトに格納されているすべてのレコードをA1セルを起点に貼り付けます。特定のフィールドのレコードを抽出する場合は特定フィールドのデータを取得する方法をご覧ください。


11行目【レコード.Close: Set レコード = Nothing】
Recordset【レコードセット】オブジェクトのClose【クローズ】メソッドでレコードの参照を切断し、Nothing【ナッシング】を代入してメモリー領域を解放します。


12行目【コネクション.Close: Set コネクション = Nothing】
Connection【コネクション】オブジェクトのClose【クローズ】メソッドで外部データベースの接続を切断し、Nothing【ナッシング】を代入してメモリー領域を解放します。


実行結果


以上で、複数の条件式でレコードを検索して抽出する方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告