AccessテーブルデータをExcelシートへ取り込む方法について説明します。ExcelとAccessとの連携によるデータのやり取りでは基本中の基本操作となります。是非一連の流れを理解して活用してみて下さい。
【目次】
構文
記述方法は以下の通りとなります。
=========================================================
①データベースへの接続
Set[参照データベース]= OpenDatabase(”[データベースの登録パス]”)
②テーブルへの接続
Set[参照テーブル]=[参照データベース].OpenRecordset(”[SQL文]”)
-----------------------------------
[参照テーブル].MoveFirst
Do Until ([参照テーブル].EOF)
[取り込むシート名及びセル名] = [参照テーブル]![項目名]
[参照テーブル].MoveNext
Loop
-----------------------------------
③テーブルの切断
[参照テーブル].Close
Set[参照テーブル]= Nothing
④データベースの切断
[参照データベース].Close
Set[参照データベース]= Nothing
=========================================================
[説明]:
テーブルのデータを取り込むには
-----------------------------------
[参照テーブル].MoveFirst
Do Until ([参照テーブル].EOF)
[取り込むシート名及びセル名] = [参照テーブル]![項目名]
[参照テーブル].MoveNext
Loop
-----------------------------------
と記述します。
[参照テーブル].MoveFirstは、テーブル([参照テーブル])の中に登録されている最初のデータ(MoveFirst)に移動する指定となります。次のDo Until ([参照テーブル].EOF)~Loopでは、テーブル([参照テーブル])の中にある最後のデータ(EOF)に移動するまで繰り返し処理を実行する指定となります。この繰り返し処理の中で[取り込むシート名及びセル名] = [参照テーブル]![項目名]を毎回実行する事になります。[参照テーブル]![項目名]は、テーブル([参照テーブル])に含まれるテーブルの項目名([項目名])を意味しており、この項目名に対するデータを指定したシートのセル([取り込むシート名及びセル名])にセットします。次の[参照テーブル].MoveNextでは、テーブル([参照テーブル])中の次のデータ(MoveNext)に移動させる指定となります。内容を纏めると、「テーブル([参照テーブル])に登録されているデータを最初から最後まで読み込み、指定したシートのセル([取り込むシート名及びセル])に取り込んで下さい。」との意味になります。
※Accessテーブルのデータを取り込むには、事前にAccessデータベースへの接続(上記①)やテーブルへの接続(上記②)の記述が必要となります。また、テーブルのデータを取り込んだ後には、テーブルの切断(上記③)やデータベースの切断(上記④)の記述も必要となります。これらの記述はテーブルデータの取り込みと一緒に記述する必要があるため、是非覚えておいて下さい。ちなみに、データベースへの接続/切断についてはこちらを、テーブルへの接続/切断についてはこちらを参照して下さい。
[記述例]:
r.MoveFirst
Do Until (r.EOF)
Sheets("従業員").Range("A" & 行) = r![氏名]
行 = 行 + 1
r.MoveNext
Loop
使い方
使い方について具体的に説明していきます。
[プログラミング例]:
-------------------------------------------------
Dim db As Database
Dim r As Recordset
Dim 行 As Integer
'↓処理②
Set db = OpenDatabase("C:\テスト\従業員.accdb")
'↓処理③
Set r = db.OpenRecordset("select * from T_従業員")
'↓処理④
行 = 1
r.MoveFirst
Do Until (r.EOF)
Sheets("従業員").Range("A" & 行) = r![氏名]
Sheets("従業員").Range("B" & 行) = r![番号]
Sheets("従業員").Range("C" & 行) = r![部署]
Sheets("従業員").Range("D" & 行) = r![性別]
Sheets("従業員").Range("E" & 行) = r![年齢]
行 = 行 + 1
r.MoveNext
Loop
'↓処理⑤
r.Close
Set r = Nothing
'↓処理⑥
db.Close
Set db = Nothing
-------------------------------------------------
処理の流れは以下の通りとなります。
[処理①]:変数の定義
Dimによる変数の定義となります。
[処理②]:データベースへの接続
データベースをOPENし[処理①]で定義した変数:dbにデータベースの参照を代入します。今回はC:\テストに従業員.accdbデータベースが登録されている事とします。(※データベースへの接続についてはこちらを参照して下さい。)
[処理③]:テーブルへの接続
テーブルをOPENし[処理①]で定義した変数:rにテーブルの参照を代入します。今回は「T_従業員」テーブルを使用しますが、このテーブルは従業員.accdbの中に含まれています。また、指定したSQL文は「T_従業員テーブルの全項目を使用します。」との意味になります。(※テーブルへの接続についてはこちらを参照して下さい。)
[処理④]:テーブルデータの取り込み
最初に[処理①]で定義した変数:行に1をセットします。
次にMoveFirstでテーブル中に登録されている最初のデータに移動します。
最後にDo~Loop文を使用してテーブルデータの最後(EOF)まで繰り返し処理を行います。繰り返し処理を行う中で、テーブルの各項目データ(氏名・番号・部署・性別・年齢)をExcelシートの指定セル(A列~E列セル)にセットします。セット後には変数:行に1を足し込み(行 = 行 + 1)、更にMoveNextでテーブル中の次のデータに移動させます。
[処理⑤]:テーブルの切断
テーブルの切断を行います。(※テーブルの切断についてはこちらを参照して下さい。)
[処理⑥]:データベースの切断
最後にデータベースの切断を行います。(※データベースの切断についてはこちらを参照して下さい。)
※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。また、Accessデータベースとの接続には事前設定が必要となります。事前準備はこちらを参考にして下さい。
[実行例]:
(実行前)
C:\テストにAccessデータベース(従業員.accdb)が登録されています。
従業員.accdbデータベースの中には、T_従業員テーブルが登録されています。
T_従業員テーブルの中には、以下のデータが登録されています。
取り込む先のExcelシートには以下の様な<実行>ボタンが登録されており、ボタンには上記のプログラムが登録されています。
(実行後)
指定のExcelシート及びセルにAccessテーブルに登録されているデータの取り込みができました。
[サンプル]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
Accessテーブルデータを取り込む方法についての説明は以上です。
おわりに
今回はAccessテーブルデータを取り込む方法について説明しました。テーブルデータを取り込むには、Do~Loop文を用いて指定したテーブルの最初のデータから最後のデータまでの読み込みを行いながら、指定シートの指定セルにデータをセットする流れとなります。是非覚えておいて下さい。また、今回の様にExcel⇔Accessの連携した処理を行う場合に関しては、予め事前の準備作業が必要となります。忘れずに実施しておくようにお願いします。