【入門編】【初心者】TableDefで学ぶ!VBAによるテーブル作成とフィールド追加の基本ステップ – Access VBA解析バイブル

スポンサーリンク

Access VBAの深淵へようこそ:GUIを捨て、「テーブル創造」の力を手に入れよう

こんにちは。Accessの迷宮を探索する皆さんに、今日は「創造の魔法」を授けます。

多くの初心者が、AccessのGUI(画面)でポチポチとテーブルを作ります。しかし、本当のエンジニアは違います。「コードでテーブルを生み出し、コードで構造を書き換える」。 これができるようになると、データの管理はあなたの意のままです。

今日は、Accessの心臓部である `TableDef`(テーブル定義)を操作し、VBAだけでテーブルを構築する術を伝授します。ここをマスターすれば、Access開発の景色がガラリと変わりますよ。

1. そもそも「TableDef」とは何か?

Accessのテーブルは、ただの「データの箱」ではありません。データベースエンジンが管理する「定義情報(メタデータ)」の集合体です。

VBAでこれを操作する際、`DAO (Data Access Objects)` という強力なライブラリを使います。まずは、あなたの脳内に以下の地図を描いてください。

  • Databaseオブジェクト: データベースそのもの。
  • TableDefオブジェクト: テーブルの「設計図」そのもの。
  • Fieldオブジェクト: 設計図の中の「列(項目)」の定義。

この3層構造を意識するだけで、エラーの9割は防げます。

2. 実践!VBAでテーブルを創造する

では、実際にコードを書いてみましょう。以下のコードは「T_Employees」というテーブルを新規作成し、そこに「ID(数値)」と「氏名(テキスト)」を追加する例です。

Sub CreateNewTable()
Dim db As DAO.Database
Dim td As DAO.TableDef
Dim fld As DAO.Field

Set db = CurrentDb

‘ 1. テーブル定義を作成(名前を付けて初期化)
Set td = db.CreateTableDef(“T_Employees”)

‘ 2. フィールドを追加(名前と型を指定)
‘ dbLong = 数値型, dbText = テキスト型
Set fld = td.CreateField(“EmployeeID”, dbLong)
td.Fields.Append fld

Set fld = td.CreateField(“FullName”, dbText, 50) ‘ 50は文字数
td.Fields.Append fld

‘ 3. テーブル定義をデータベースに登録(重要!)
db.TableDefs.Append td

‘ 後片付け
Set td = Nothing
Set db = Nothing

MsgBox “テーブルの作成が完了しました!”, vbInformation
End Sub

【ここがプロのポイント】

  • Appendの儀式: `CreateField` しただけでは、まだ空中に浮いている状態です。必ず `Fields.Append` して「設計図に組み込み」、最後に `TableDefs.Append` して「データベースに実装」する。この二段構えを忘れないでください。
  • メモリの解放: `Set … = Nothing` はおまじないではありません。オブジェクトの寿命を適切に管理し、メモリリークという地雷を踏まないためのエンジニアの嗜みです。

3. 初学者が必ずハマる「罠」と対処法

開発現場でよくある失敗を先回りして教えます。

Q. 「すでに存在するテーブル名で作ろうとするとエラーが出る!」

A. 当然です。データベースは「重複」を嫌います。作成前に存在チェックを行いましょう。

‘ テーブルが存在するか確認する関数
If IsNull(DLookup(“Name”, “MSysObjects”, “Name=’T_Employees’ And Type=1”)) Then
‘ ここに上の作成コードを入れる
Else
MsgBox “そのテーブルは既に存在します。”
End If

Q. 「データ型はどれを選べばいい?」

A. 混乱したときは、イミディエイトウィンドウで `? dbLong` のように打ち込んでください。DAOの定数は定数名だけでなく、数値としても扱われます。最初は `dbText`, `dbLong`, `dbDate`, `dbBoolean` を覚えれば十分です。

4. 最後に:なぜ「コード」でやるのか?

「GUIでいいじゃん」と思ったあなた。その通りです。しかし、大規模なシステムになると、「顧客の環境に合わせて動的にフィールドを追加する」「バックアップ用のログテーブルを自動生成する」 といった機能が必須になります。

手作業からの脱却は、ただの効率化ではありません。「プログラムがプログラムを設計する」という、エンジニアとしての第一歩なのです。

今回のコードをコピーして、まずは自分の環境で動かしてみてください。テーブルがスッと現れたとき、あなたはもう以前のあなたではありません。

何か分からないことがあれば、いつでも聞いてください。Accessの海を共に渡るパートナーとして、いつでもサポートしますよ!

タイトルとURLをコピーしました