access PR

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

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

【PR】AccessやVBAの基礎をしっかり学びたい方には、
以下の入門書が分かりやすくておすすめです。
今回のような“テーブル構造”や“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

 

よくあるエラーと対処法

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

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

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

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

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

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

補足リンク(関連記事)

まとめ

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

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

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

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