accessデータベース操作 PR

Access VBA|Accessでテーブルのフィールド一覧を取得する方法【VBAで項目名を自動取得】

記事内に商品プロモーションを含む場合があります

Access を使っていて、

  • このテーブルにはどんなフィールドがあったっけ?

  • 項目名の一覧をすぐ見たい

  • フォームや帳票作成のたびに確認するのが面倒

  • 動的に項目名を取得して、Excel出力にも使いたい

こういう場面は仕事でも頻繁にあります。

この記事では、
Access VBAでテーブルのフィールド名一覧を取得する方法
初心者にも分かりやすく解説します。

  • DAO を使った定番の取得方法

  • 配列やリストに格納するサンプル

  • Excel に書き出すコード

  • 実務で便利な動的フィールド取得

  • コピペで動くコードだけを掲載

テーブル名一覧(テーブル一覧)の取得方法と、各テーブルのフィールド名を自動取得する方法をまとめています。

Accessでフィールド名を取得する基本(DAO)

Access のフィールド名は DAO を使うと簡単に取得できます。

基本形はこの3ステップです。

  1. データベースを参照

  2. テーブル定義(TableDef)を取得

  3. フィールドコレクション(Fields)を参照

テーブルのフィールド名をすべて取得する基本コード

Private Sub GetFieldList()

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field

Set db = CurrentDb
Set tdf = db.TableDefs(“T_売上”)

For Each fld In tdf.Fields
Debug.Print fld.Name
Next fld

End Sub

実行結果

イミディエイトにこう表示されます。

売上日
商品名
数量
単価
金額

フィールド名をフォームに一覧表示する

フォームにリストとして表示したい場合のコードです。

ListBox にフィールド名をセットするコード

Private Sub コマンド1_Click()

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim s As String

Set db = CurrentDb
Set tdf = db.TableDefs(“T_売上”)

Me.List0.RowSource = “”

For Each fld In tdf.Fields
s = s & fld.Name & “;”
Next fld

‘ 最後のセミコロンを削除
s = Left(s, Len(s) – 1)

Me.List0.RowSource = s

End Sub

フィールド名を配列に取得する(実務で便利)

フィールド名を Array に入れると
Excel 出力や JSON 生成にとても便利です。

フィールド名を配列に格納するコード

Private Function GetFieldArray(tbl As String) As Variant

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim arr() As String
Dim i As Long

Set db = CurrentDb
Set tdf = db.TableDefs(tbl)

ReDim arr(0 To tdf.Fields.Count – 1)

For i = 0 To tdf.Fields.Count – 1
arr(i) = tdf.Fields(i).Name
Next i

GetFieldArray = arr

End Function

フィールド一覧をExcelに書き出す(Access × Excel連携)

フィールド一覧を Excel の行に書くコード

Private Sub ExportFieldList()

Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Dim arr As Variant
Dim i As Long

‘ フィールド名配列を取得
arr = GetFieldArray(“T_売上”)

‘ Excel起動
Set xlApp = CreateObject(“Excel.Application”)
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
xlApp.Visible = True

‘ Excelに書き込み
For i = LBound(arr) To UBound(arr)
xlSheet.Cells(1, i + 1).Value = arr(i)
Next i

End Sub

システムテーブルを除外する方法(初心者がつまずきやすい)

MSys から始まるシステムテーブルは不要な場合が多いです。

システムテーブルをスキップして取得する

If Left(tdf.Name, 4) = “MSys” Then
GoTo ContinueLoop
End If

フィールドプロパティ(型・サイズ・必須)も取得可能

フィールド名だけでなく、
データ型・サイズ・必須項目 も取得できます。

Debug.Print fld.Name, fld.Type, fld.Size, fld.Required

テーブル一覧(テーブル名一覧)だけを取得したい場合

Option Compare Database
Option Explicit

‘テーブル名一覧だけを取得(システムテーブル除外)
Public Sub GetTableNameList_Only()
Dim db As DAO.Database
Dim tdf As DAO.TableDef

Set db = CurrentDb

For Each tdf In db.TableDefs
If Left$(tdf.Name, 4) <> “MSys” And Left$(tdf.Name, 1) <> “~” Then
Debug.Print tdf.Name
End If
Next

Set tdf = Nothing
Set db = Nothing
End Sub

 

よくあるエラーと対処法

テーブル名が間違っている

→ TableDefs(“T_売上”) の名前を確認。

外部テーブル(リンクテーブル)が取得できない

→ DAO.TableDef.Connect を確認する。

Accessの参照設定に問題がある

→ DAO 参照が外れていないか確認。(通常は自動)

テーブル一覧をフォームに表示して管理したい場合は、
以下の記事も参考になります。

Accessでテーブル一覧をListBoxに表示する方法|VBAでテーブル名を自動取得

関連リンク

まとめ

  • フィールド一覧取得は DAO で簡単にできる

  • フォーム・配列・Excel 書き出しなど応用が広い

  • 動的にフィールドを扱うと、汎用性の高い Access システムを作れる

  • Excelとの組み合わせで現場レベルの自動化が可能