この記事では、Accessのテーブルの列名を取得する方法についてご説明します。
【動画】Accessのテーブルの列名を取得する実際の動き
本題に入る前に、まずは次のツイートをご覧ください。
Accessのテーブルの列名を取得するマクロを作ってみました😊
recordsetのopenメソッドにテーブル名を引数に指定して実行後、recordsetオブジェクトFieldsコレクションのItemプロパティのNameプロパティから列名を取得することができます😃#ExcelVBA#Access pic.twitter.com/w5b4Gkdn4p
— まさ@Excel、VBA、マクロ(経験年数16年) (@masamasa9785) August 31, 2021
Accessのテーブルの列名をマクロが取得しています。
SQL Serverのテーブルの列名を取得する方法
SQL Serverのテーブルの列名を取得するには、次の流れの通りにコードを書いていきます。
Excelのマクロ
このインスタンスは、Accessのテーブルデータの参照・挿入に必要です。
この設定により、Recordsetオブジェクトを開いたり操作することができるようになります。
列名の取得は、recordsetオブジェクトFieldsコレクションのItemプロパティのNameプロパティから列名を取得することができます。
コードの例
Excelのマクロのコード(例)
Dim DBName As String 'データベース名 Dim connDB As String 'データベース接続情報 Dim tblNM As String 'テーブル名 Dim sqlStr As String 'SQL文 Dim cnt As Long 'カウンタ Dim adoCON As New ADODB.Connection 'Connection用変数 Dim adoRS As ADODB.Recordset 'レコードセット用変数 'カレントディレクトリのデータベースパスを取得 DBName = ActiveWorkbook.Path & "\" & "0068.mdb" 'データベース接続情報の取得 adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" _ & DBName & "" 'Accessに接続する adoCON.Open connDB 'Recordsetオブジェクトのインスタンスを生成する Set adoRS = CreateObject("ADODB.Recordset") 'クライアントサイドカーソルに変更 adoRS.CursorLocation = 3 '先ほど取得したデータベース接続情報が設定されているadoCONをActiveConnectionプロパティに設定し、 'ConnectionオブジェクトとRecordsetオブジェクトを関連付ける '⇒Recordsetオブジェクトを開いたり操作するのに必要な設定 adoRS.ActiveConnection = adoCON 'データを取得するテーブル名を取得 tblNM = "tbl_data_list_ac" 'カーソルを開く adoRS.Open tblNM, adoCON For cnt = 0 To adoRS.Fields.Count - 1 '列名をセルに設定する Range("F" & cnt + 2).Value = adoRS.Fields.Item(cnt).Name Next '各終了処理 adoRS.Close If Not adoRS Is Nothing Then Set adoRS = Nothing If Not adoCON Is Nothing Then Set adoCON = Nothing
コードの解説
注目すべきコード①
最初に見て頂きたいのは32行目から42行目です。
'データを取得するテーブル名を取得 tblNM = "tbl_data_list_ac" 'カーソルを開く adoRS.Open tblNM, adoCON For cnt = 0 To adoRS.Fields.Count - 1 '列名をセルに設定する Range("F" & cnt + 2).Value = adoRS.Fields.Item(cnt).Name Next
32行目のテーブルtbl_data_list_acを、35行目のrecordsetオブジェクトのOpenメソッドに指定してOpenメソッドを実行することで列名を取得することができます。
40行目のrecordsetオブジェクトFieldsコレクションのItemプロパティのNameプロパティから列名を取り出すことができます。
上記のコードでは、取り出した列名をExcelのF列のセルに設定しています。
ちなみに上記で取得した列名のテーブル定義は次の画像の通りです。
注目すべきコード②
次に見て頂きたいのは18行目です。
'Accessに接続する adoCON.Open connDB
ConnectionオブジェクトのOpenメソッドを使ってAccessに接続しています。
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。
- Microsoft ActiveX Data Objects 2.8 Library(msado28.tlb)
なぜ必要かというと、先ほどのコードの6行目の「ADODB.Connection」と7行目の「ADODB.Recordset」というオブジェクトが、「msado28.tlb」というファイルを参照するからです。
Dim adoCON As New ADODB.Connection 'Connection用変数 Dim adoRS As ADODB.Recordset 'レコードセット用変数
この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。
ここでは「msado28.tlb」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「ADODB.Connection」と「ADODB.Recordset」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。
最後に
本記事では、Accessのテーブルの列名を取得する方法についてご説明しました。
recordsetのopenメソッドにテーブル名を引数に指定して実行後、recordsetオブジェクトFieldsコレクションのItemプロパティのNameプロパティから列名を取得することができます。
Accessのテーブルの列名を取得したい時に本記事を参考にしていただけたら幸いです。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。