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データベースの指定したフィールドのデータをワークシートに読み込む例

コード例

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

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

コードの解説

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で外部データベースの特定フィールドのデータを取得する方法に
ついての解説を終了します。
ありがとうございました。

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

フォローする

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