HOME > 即効テクニック > Excel VBA > その他関連のテクニック > エクセルユーザのデータベース活用法(基礎編3)-レコードセットの操作

即効テクニック

その他関連のテクニック

エクセルユーザのデータベース活用法(基礎編3)-レコードセットの操作

(Excel 2000)
●データの抽出のためにレコードセットの操作を行います

レコードセットとはオートフィルタのようなものと考えると理解の助けとなります。エクセルでフィルターをかけるときのことを最初に作成したデータを例に考えると、データは・・・

[伝票番号], [日付], [コード], [得意先], [金額]

オートフィルタであれば、[日付]のフィルターを"オプション"を選び、"1999/11/21"以上"1999/12/20"以下としたり、あるいは、[コード]のフィルタで"1001"を選ぶとか、ということになります。この例を実際にレコードセットを利用してデータの抽出を行います。

1.宣言セクションの宣言文を追加
Dim MyRs as ADODB.Recordset
Dim MySQL as String '抽出条件指定用
2.基礎編2のプロシージャの処理部分に追加します。宣言したレコード
  セット型変数に代入します。
Set MyRs = New ADODB.Recordset
'ここで抽出処理
MyRs.Close
3.検索条件を設定します。

"コード"が"1001"の"○×産業"という得意先の売上データを抽出するため、
宣言済みの変数MySQLに文字列として検索条件を格納します。
    MySQL = "SELECT * FROM DATA WHERE コード=1001"
この"SELECT 〜"というのはSQL(Structured Qyery Lnaguage)という言語の構文です。

SQL文の意味は・・・

From DATA ⇒ "DATA" テーブルから
"*"       ⇒ (すべての列項目)を
WHERE   ⇒ 条件(WHERE以下)に従って
SELECT  ⇒ 抽出

  SELECT * FROM テーブル名 WHERE 条件

条件の部分がエクセルのフィルタでいうオプションの設定になります。

上記の検索条件に従ってデータを取り出します。

    MyRs.Open MySQL, MyCon '接続を利用して条件を設定し、レコードセットを開く

    Do Until MyRs.EOF 'EOF(End Of File)までループ
    Debug.Print MyRs!伝票番号, MyRs!日付, MyRs!コード, MyRs!得意先, MyRs!金額
    MyRs.MoveNext '次の行(レコード)に移る
    Loop

(ポイント)

1.レコードセットのオープン

Openメソッドの引数として、抽出条件を格納した変数(MySQL)と接続(MyCon)を指定

=>構文:  レコードセット型変数.Open( 検索文字列、現在の接続をあらわす変数)

2.列項目の指定

=>  レコードセット!列項目(フィールド)

3.次の行に移る

=>  レコードセット.MoveNext

(サンプル)
'宣言セクション

Const MyPath = "C:\My Documents\データベース.mdb"
Dim MyCon As ADODB.Connection
Dim MyRs As ADODB.Recordset
'テスト用プロシージャ

Sub AccessDatabase()

    Dim MySQL As String
    Set MyCon = New ADODB.Connection
    
    MyCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                                & "Data Source=" & MyPath
    MyCon.Open
    
    Set MyRs = New ADODB.Recordset

    '**************抽出開始****************************
    MySQL = "SELECT * FROM DATA WHERE コード=1001"
    MyRs.Open MySQL, MyCon
    
    Do Until MyRs.EOF
      Debug.Print _
	MyRs!伝票番号, MyRs!日付, MyRs!コード, MyRs!得意先, MyRs!金額
      MyRs.MoveNext
    Loop
    '***************抽出終了***************************
    MyRs.Close
    MyCon.Close
    
End Sub
サンプル実行後イミディエイトウィンドウに出力されていることを確認してください。

●いつからいつまでの間、という指定をしたい場合には

  フィールド名 BETWEEN 〜 AND〜という指定の仕方をします。

※日付は"#"でくくるようにします。

(例)SELECT * FROM DATA WHERE 日付 BETWEEN #2000/6/01# AND #2000/6/20#

これを応用すると、複数条件の間を"AND"で結んで以下のような検索ができます。
6/1〜6/20までの売上データの中で、得意先コード"1001"の得意先データを抽出するような場合・・・

(例)WHERE コード=1001 AND 日付 BETWEEN #2000/6/01# AND #2000/6/20#"

のようになります。