【ExcelVBA】Accessのデータベースの標準テーブル名を取得するには

この記事では、Accessのデータベースの標準テーブル名を取得する方法についてご説明します。

【動画】Accessのデータベースの標準テーブル名を取得する実際の動き

本題に入る前に、まずは次のツイートをご覧ください。

マクロがAccessのデータベースの標準テーブル名を取得しています。
(取得した標準テーブル名をE列のセルに書き出しています)

Accessのデータベースの標準テーブル名はTableオブジェクトのNameプロパティから取得することができる

Accessのデータベースの標準テーブル名はTableオブジェクトのNameプロパティから取得することができます。

ここでいうTableオブジェクトは、ADOXのTableオブジェクトのことです。

ADOXとは
ADOXとは、ADOの拡張機能のことを言い、Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and Securityの略です。
【参考】ADOXの基礎

Accessのデータベースの標準テーブル名を取得する方法

Accessのデータベースの標準テーブル名を取得するには、次の流れの通りにコードを書いていきます。

Excelのマクロ

STEP.1
Accessへの接続情報取得
Accessに接続するための接続情報を取得します。
接続情報はCatalogオブジェクトのインスタンスのActiveConnectionプロパティに設定します。
STEP.2
Accessのデータベースの標準テーブル名を取得
Accessのデータベースの標準テーブル名を取得します。
Accessのデータベースの標準テーブル名はTableオブジェクトのNameプロパティから取得します。

コードの例

Excelのマクロのコード(例)

    Dim DBName      As String               'データベース名
    Dim cnt         As Long                 'カウンタ
    Dim objCat      As New ADOX.Catalog     'データソースのスキーマカタログを記述するコレクション
    Dim objTable    As New ADOX.Table       '列、インデックス、およびキーを含むデータベーステーブル
    
    'カウンタを初期化する
    cnt = 2
        
    'カレントディレクトリのデータベースパスを取得
    DBName = ActiveWorkbook.Path & "\" & "0071.mdb"
 
    'データベース接続情報の取得
    objCat.ActiveConnection = "provider=Microsoft.ACE.OLEDB.12.0;" _
                            & "Data Source=" _
                            & DBName & ""

    For Each objTable In objCat.Tables
    
        Select Case objTable.Type
        
            Case "TABLE"
                'Accessの標準テーブルをF列のセルに設定する
                Range("E" & cnt).Value = objTable.Name
                cnt = cnt + 1
        
        End Select
    
    Next
                
    '各終了処理
    If Not objCat Is Nothing Then Set objCat = Nothing

コードの解説

注目すべきコード①

最初に見て頂きたいのは17行目から31行目です。

    For Each objTable In objCat.Tables
    '存在するテーブルやクエリ、フォームなどの数だけループさせる
 
        Select Case objTable.Type
        
            Case "TABLE"
                '「TABLE」の場合
 
                'Accessの標準テーブルをE列のセルに設定する
                Range("E" & cnt).Value = objTable.Name
                cnt = cnt + 1
        
        End Select
    
    Next

17行目のFor文で、Accessのデータベースに存在するテーブルやクエリ、フォームなど全ての中(Tablesコレクション)からAccessのデータベースの標準テーブル名を探して特定させるためループさせます。

ループ中はTableオブジェクトのTypeプロパティの値を確認します。(20行目のSelect Caseで)

TableオブジェクトのTypeプロパティの値が「TABLE」の場合(22行目)は、Accessのデータベースの標準テーブル名になります。

Accessのデータベースの標準テーブル名はnameプロパティから取得することができます。
(取得したAccessのデータベースの標準テーブル名をE列のセルに設定しています)

注目すべきコード②

次に見て頂きたいのは11行目から16行目です。

    'カレントディレクトリのデータベースパスを取得
    DBName = ActiveWorkbook.Path & "\" & "0071.mdb"
 
    'データベース接続情報の取得
    objCat.ActiveConnection = "provider=Microsoft.ACE.OLEDB.12.0;" _
                            & "Data Source=" _
                            & DBName & ""

11行目でAccessのデータベースの標準テーブル名を取得したい対象のデータベース名を指定しています。

14行目で、11行目で指定したデータベース「0071.mdb」に対する接続情報をActiveConnectionプロパティに渡すことで、Accessのテーブルやビューを参照することができるようになります。(カタログが開きます)

Accessのデータベースの標準テーブル名を取得した結果

Accessのデータベースの標準テーブル名を取得した結果は下の画像になります。

F列のセルに、取得したAccessのデータベースの標準テーブル名が書き込まれています。

ちなみに、Accessのデータベース「0071.mdb」の標準テーブル名を直接見てみると次の通りです。

Excelのシートに書き出されたAccessのデータベースの標準テーブル名と名前と数が一致していることが確認できます。

【注意】参照設定が必要です

一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。

参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。

  1. Microsoft ADO Ext. 2.8 for DDL and Security(msadox28.tlb)

なぜ必要かというと、先ほどのコードの3行目の「ADOX.catalog」と4行目の「ADOX.Table」というオブジェクトが「msadox28.tlb」というファイルを参照するからです。

    Dim objCat      As New ADOX.Catalog     'データソースのスキーマカタログを記述するコレクション
    Dim objTable    As New ADOX.Table       '列、インデックス、およびキーを含むデータベーステーブル

この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。

ここでは「msadox28.tlb」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「ADOX.catalog」「ADOX.Table」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。

最後に

本記事では、Accessのデータベースの標準テーブル名を取得する方法についてご説明しました。

Accessのデータベースの標準テーブル名は、ADOXのTableオブジェクトのNameプロパティから取得することができます。

Accessのデータベースの標準テーブル名を取得したい時に本記事を参考にしていただけたら幸いです。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら