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月の売上データを抽出する例

コード例

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

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

コードの解説

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【ナッシング】を代入して
メモリー領域を解放します。


実行結果


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

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク