本記事では、マクロからMicrosoft Accessのデータを取得する方法についてご説明します。
マクロからMicrosoft Accessのデータを取得する方法
マクロからMicrosoft Accessのデータを取得するには、次の流れの通りにコードを書いていきます。
このMicrosoft Accessに接続するための接続情報は、Microsoft Accessに接続するための「鍵」みたいなものなので必ずコードに記述する必要があります。
Microsoft Accessに接続するには、ConnectionオブジェクトのOpenメソッドを使います。
このインスタンスは、Microsoft Accessのデータの取得に必要です。
レコードセットを開くには、RecordsetオブジェクトのインスタンスのOpenメソッドを使用します。
このOpenメソッドにデータを抽出するSQL文を引数に指定します。
参照したデータを取得するには、RecordsetオブジェクトのGetRowsメソッドを使います。
この取得したデータは配列に格納することができます。
コードの例
Excelのマクロのコード(例)
Excelのマクロのコード(例)は次の通りです。
Dim strFileName As String, strSQL As String Dim adoCON As New ADODB.Connection Dim adoRS As New ADODB.Recordset 'カレントディレクトリのデータベースパスを取得 strFileName = ActiveWorkbook.Path & "\タスク情報.accdb" 'データを取得するSQL文 strSQL = "select * from dbo.tbl_userInfo" 'データベース接続情報の取得 adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" & strFileName & "" 'データベースに接続する adoCON.Open 'オブジェクトの設定(取得用) Set adoRS = CreateObject("ADODB.Recordset") adoRS.CursorLocation = 3 ' クライアントサイドカーソルに変更 'レコードセットを開く adoRS.Open strSQL, adoCON, adOpenDynamic '通常のselect getVal = adoRS.GetRows 'クローズ処理 adoRS.Close Set adoRS = Nothing adoCON.Close Set adoCON = Nothing
コードの解説
最初に見て頂きたいのは22行目です。
RecordsetオブジェクトのOpenメソッドを使い、取得したいテーブルのデータを参照しています。
その参照したデータを取得するには、25行目にあるRecordsetオブジェクトのGetRowsメソッドを使います。
GetRowsメソッドを使うことで、データを取得することができます。(コード(例)では、取得したデータを配列getValに格納しています)
なお、どんなデータを取得したいかは変数strSQLにSQL文を設定し(9行目)、Openメソッドの引数に指定します。(22行目)
また、Microsoft Accessのデータを取得するにはまずMicrosoft Accessに接続しなければいけませんが、マクロからMicrosoft Accessに接続する処理(12行目から16行目)については次の記事で詳しく説明しているので、そちらもあわせてご覧ください。
【ExcelVBA】ExcelのマクロからMicrosoft Accessに接続するには【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。
- Microsoft ActiveX Data Objects 2.8 Library(msado28.tlb)
なぜ必要かというと、先ほどのコードの2行目の「ADODB.Connection」と3行目の「ADODB.Recordset」というオブジェクトが、「msado28.tlb」というファイルを参照するからです。
Dim adoCON As New ADODB.Connection Dim adoRS As New ADODB.Recordset
この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。
ここでは「msado28.tlb」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「ADODB.Connection」と「ADODB.Recordset」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。
【動画】マクロからMicrosoft Accessのデータを取得する参考動画
ツイート内の動画では、会員番号が入ったコンボボックスで会員番号を選ぶとMicrosoft Accessに接続してデータを取得し、取得したデータをExcelのシートにある黄色のセルに設定しています。(動画の0:00~0:10あたり)
ExcelVBAからAccessのDBにアクセスして参照・更新処理ができるか確認してみました😀
以前ExcelVBAとSQL Serverとの連携を確認してみたときと似たようなこと(https://t.co/yi0FE4XM9W)を今回やってみました😄#Excel#VBA#Access pic.twitter.com/TZHe7I8PNg
— まさ@Excel、VBA、マクロ(経験年数16年) (@masamasa9785) March 15, 2021
最後に
本記事では、マクロからMicrosoft Accessのデータを取得する方法についてご説明しました。
以下の処理を実装することで、Microsoft Accessのデータを取得することができます。
- ①Microsoft Accessへの接続情報取得
- ② ①の情報を参照してMicrosoft Accessに接続
- ③Recordsetオブジェクトのインスタンスの生成
- ④データを抽出するSQL文をもとにレコードセットを開く
- ⑤参照したデータを取得
手順は多いですが、コードを実装する際は、先ほどお見せしたコードの例を参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。