Excel VBA ADOで外部データベースの特定フィールドのデータを取得する

スポンサーリンク

ADOで特定フィールドのデータを取得する方法

ActiveX Data objects【アクティブエックスデータオブジェクツ】(以下ADO)で、特定のフィールドのデータを取得するには、レコードのフィールドを表すField【フィールド】オブジェクトのValue【バリュー】プロパティを使用します。

データを取得するフィールドを指定するには、Recordset【レコードセット】オブジェクトのFields【フィールズ】プロパティを使用してField【フィールド】オブジェクトを参照します。

特定のフィールドを取得するために使用するプロパティとメソッド

プロパティ・メソッド内容
Recordset.Fieldsプロパティ
【レコードセットフィールズ】
外部データベースの特定のフィールドを表す
Field【フィールド】オブジェクトを参照します。
Field.Valueメソッド
【フィールドバリュー】
外部データベースの特定のフィールドの値を
取得または設定します。
Recordset.BOFプロパティ
【レコードセットビギンオブファイル】
外部データベースのカレントレコードの
位置がデータ範囲の先頭レコードより前に
あるかないかをブール型の値で返します。
Recordset.EOFプロパティ
【レコードセットエンドオブファイル】
外部データベースのカレントレコードの
位置がデータ範囲の最後レコードより後に
あるかないかをブール型の値で返します。
Recordset.MoveNextメソッド
【ムーブネクスト】
Recordset.MovePreviousメソッド
【ムーブプビリアス】
Recordset.MoveFirstメソッド
【ムーブファースト】
Recordset.MoveLastメソッド
【ムーブラスト】
外部データベース内のカレントレコードを移動します。

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

外部データベースの特定のフィールドを表すField【フィールド】オブジェクトを参照するには、Recordset【レコードセット】オブジェクトのFields【フィールズ】プロパティを使用します。

Recordset.Fields【レコードセットフィールズ】プロパティの書式と設定値(引数)の説明

オブジェクト変数.Fields(フィールド名)


Field.Value【フィールドバリュー】メソッド

外部データベースの特定のフィールドの値を取得または設定するには、Field【フィールド】オブジェクトのValue【バリュー】メソッドを使用します。

Field.Value【フィールドバリュー】メソッドの書式と設定値の説明

【取得】
オブジェクト.Value
【設定】
オブジェクト.Value = 設定値

  • オブジェクト(必須)
    外部データベースの特定のフィールドを表すField【フィールド】オブジェクトを指定します。
  • 設定値(必須)
    特定のフィールドに設定したいデータを指定します。外部データベースのフィールドと設定するデータのデータ型が違うとエラーになります。データ型が一致するデータを指定してください。

BOF【ビギンオブファイル】プロパティ

EOF【エンドオブファイル】プロパティ

外部データベースのカレントレコードの位置がデータベースの範囲を超えたかをブール型の値で返します。値の取得のみ可能です。
BOFは「Begin Of File【ビギインオブファイル】」の略で、カレントレコードの位置が外部データベースの先頭のレコードより前にあるかないかを判定する場合に使用します。

カレントレコードの位置BFOの値
先頭のレコードの前True
先頭のレコードFalse
最後のレコードFalse
最後のレコードの後False

EOFは「End OF File【エンドオブファイル】」の略で、カレントレコードの位置が外部データベースの最後のレコードより後にあるかないかを判定する場合に使用します。

カレントレコードの位置EFOの値
先頭のレコードの前False
先頭のレコードFalse
最後のレコードFalse
最後のレコードの後True

BOF・EOFプロパティの書式と設定値の説明

オブジェクト変数.BOF
オブジェクト変数.EOF

  • オブジェクト変数(必須)
    外部データのレコードを表すRecordset【レコードセット】オブジェクトのインスタンスが格納されている
    オブジェクト変数を指定します。

外部データベース内のレコードのカーソルを移動するメソッド

Recordset【レコードセット】オブジェクト内のカーソルを移動するには以下の表のRecordset【レコードセット】オブジェクトの各メソッドを使用します。

カーソルを移動する位置使用するメソッド
次のレコードMoveNext【ムーブネクスト】
前のレコードMovePrevious【ムーブプビリアス】
先頭のレコードMoveFirst【ムーブファースト】
最後のレコードMoveLast【ムーブラスト】

各メソッドの書式と設定値

オブジェクト変数.MoveNext
オブジェクト変数.MovePrevious
オブジェクト変数.MoveFirst
オブジェクト変数.MoveLast

  • オブジェクト変数(必須)
    外部データのレコードを表すRecordset【レコードセット】オブジェクトのインスタンスが格納されているオブジェクト変数を指定します。

Accessデータベースの指定したフィールドのデータをワークシートに読み込む例

コードと解説

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

Sub 特定フィールド読み込み()
Dim コネクション As New ADODB.Connection
Dim レコード As New ADODB.Recordset
Dim i As Long
コネクション.Open ConnectionString:= _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:¥Users¥Desktop¥Database1.accdb;"
レコード.Open Source:="商品マスター", ActiveConnection:=コネクション
i = 1
Do Until レコード.EOF
Cells(i, 1).Value = レコード.Fields("商品名").Value
レコード.MoveNext
i = i + 1
Loop
レコード.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行目【Dim i As Long】
繰り返し処理の中でワークシートの行番号を格納する変数iを長整数型(Long)で宣言します。


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

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


8行目【レコード.Open Source:=”商品マスター”, ActiveConnection:=コネクション】
Recordset【レコードセット】オブジェクトのOpen【オープン】メソッドを使用して外部データベースのレコードを参照します。


9行目【i = 1】
ワークシートの行番号を格納する変数iに1を代入します。


10行目【Do Until レコード.EOF】
Do Loop【ドウ ループ】 ステートメントを使用して繰り返し処理の始まりです。繰り返しの条件をUntil【アンティル】の「~ではない間」に設定してEOF【エンドオブフィールド】プロパティがTrueではない間(外部データベースの最後のレコードまでの間)繰り返す条件を設定します。


11行目【Cells(i, 1).Value = レコード.Fields(“商品名”).Value】
1列目の変数i行目のセルにValue【バリュー】プロパティで取得した外部データベースの「商品名」フィールドの値を代入します。


12行目【レコード.MoveNext】
Recordset【レコードセット】オブジェクトMoveNext【ムーブネクスト】メソッドを使用して外部データベースのカーソルの位置を次のレコードに移します。


13行目【i = i + 1】
セルの行番号が格納されている変数iに1を加算してセルの次の行を参照する準備をします。


14行目【Loop】
10行目からここまでの処理を外部データベースのレコードの数(EOFがTrueになるまで)繰り返してワークシートに「商品名」フィールドのデータを代入します。


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


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


実行結果


以上で、ADOで外部データベースの特定フィールドのデータを取得する方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告