Access VBA の DAO (Data Access Objects) を使用してプログラムからテーブルやフィールドを動的に生成する際、指定するパラメータである `DataTypeEnum` には多くの種類が存在します。しかし、どの定数で実際にフィールドが作成でき、どの定数が作成できないのかを一覧化した資料はあまり見つかりません。
本記事では、Access 2013 (64bit) 環境において検証用コードを実行し、`DataTypeEnum` の全定数のうち生成可能なものと生成できないものを検証した結果を解説します。
## 検証用ソースコード
検証に使用したVBAコードです。`Microsoft Scripting Runtime` の参照設定が必要です。
“`vba
Option Compare Database
‘ 参照設定: Microsoft Scripting Runtime
Dim Dic As Dictionary
Sub CreateDataTypeEnumAndName()
Set Dic = New Dictionary
Dic.Add DataTypeEnum.dbAttachment, “添付ファイル データ”
Dic.Add DataTypeEnum.dbBinary, “バイナリ型データ”
Dic.Add DataTypeEnum.dbBoolean, “ブール型 (True または False) データ”
Dic.Add DataTypeEnum.dbByte, “バイト型 (8 ビット) データ”
Dic.Add DataTypeEnum.dbChar, “テキスト型データ (固定幅)”
Dic.Add DataTypeEnum.dbComplexByte, “複数値バイト型データ”
Dic.Add DataTypeEnum.dbComplexDecimal, “複数値 10 進型データ”
Dic.Add DataTypeEnum.dbComplexDouble, “複数値倍精度浮動小数点型データ”
Dic.Add DataTypeEnum.dbComplexGUID, “複数値 GUID 型データ”
Dic.Add DataTypeEnum.dbComplexInteger, “複数値整数型データ”
Dic.Add DataTypeEnum.dbComplexLong, “複数値長整数型データ”
Dic.Add DataTypeEnum.dbComplexSingle, “複数値単精度浮動小数点型データ”
Dic.Add DataTypeEnum.dbComplexText, “複数値テキスト型データ (可変幅)”
Dic.Add DataTypeEnum.dbCurrency, “通貨型データ”
Dic.Add DataTypeEnum.dbDate, “日付型データ”
Dic.Add DataTypeEnum.dbDouble, “倍精度浮動小数点型データ”
Dic.Add DataTypeEnum.dbGUID, “GUID 型データ”
Dic.Add DataTypeEnum.dbInteger, “整数型データ”
Dic.Add DataTypeEnum.dbLong, “長整数型データ”
Dic.Add DataTypeEnum.dbLongBinary, “バイナリ型データ (ビットマップ)”
Dic.Add DataTypeEnum.dbMemo, “メモ型データ (拡張テキスト)”
Dic.Add DataTypeEnum.dbSingle, “単精度浮動小数点型データ”
Dic.Add DataTypeEnum.dbText, “テキスト型データ (可変幅)”
Dic.Add DataTypeEnum.dbBigInt, “多倍長整数型データ”
Dic.Add DataTypeEnum.dbDecimal, “10 進型データ (ODBCDirect のみ)”
Dic.Add DataTypeEnum.dbFloat, “浮動小数点型データ (ODBCDirect のみ)”
Dic.Add DataTypeEnum.dbNumeric, “数値型データ (ODBCDirect のみ)”
Dic.Add DataTypeEnum.dbTime, “時刻形式のデータ (ODBCDirect のみ)”
Dic.Add DataTypeEnum.dbTimeStamp, “時刻および日付の形式のデータ (ODBCDirect のみ)”
Dic.Add DataTypeEnum.dbVarBinary, “可変長バイナリ型データ (ODBCDirect のみ)”
End Sub
Sub CreateTableUsingDao()
Dim dbsCurrent As DAO.Database
Dim tdfNew As DAO.TableDef
Dim errDB As DAO.Error
Dim F As DAO.Field2
Dim Var As Variant
Set dbsCurrent = OpenDatabase(CurrentDb.Name)
Set tdfNew = dbsCurrent.CreateTableDef(“テストテーブル”)
Call CreateDataTypeEnumAndName
‘ ダミーフィールドでテーブルを生成
Call AppendToTableDef(tdfNew, “テーブル生成のために作成したダミーフィールド”, dbGUID)
dbsCurrent.TableDefs.Append tdfNew
‘ 定数分ループ
For Each Var In Dic
Call AppendToTableDef(tdfNew, Dic.Item(Var), Var)
Next Var
‘ ダミーフィールド削除
Call tdfNew.Fields.Delete(“テーブル生成のために作成したダミーフィールド”)
Debug.Print “★—————————★”
Debug.Print “総定数数:” & Dic.Count
Debug.Print “うち生成数:” & tdfNew.Fields.Count
Call ShowFields(“テストテーブル”, Dic)
End Sub
Sub AppendToTableDef(ByRef TD As DAO.TableDef, ByVal Name As String, ByVal TypeENum As DAO.DataTypeEnum)
On Error GoTo ERROR_EXIT
Dim F As DAO.Field2
Dim errDB As DAO.Error
Set F = TD.CreateField(Name, TypeENum)
TD.Fields.Append F
Exit Sub
ERROR_EXIT:
For Each errDB In DBEngine.Errors
Debug.Print “■テーブル未作成———————■”
Debug.Print “NG Name: ” & Name
Debug.Print “NG DataTypeEnum(DataTypeEnumName):” & TypeENum & “(” & Dic(TypeENum) & “)”
Debug.Print “NG Source: ” & errDB.Source
Debug.Print “NG Description: ” & errDB.Description
Debug.Print “NG Number: ” & errDB.Number
Next
End Sub
Sub ShowFields(ByVal TableName As String, ByRef Dic As Dictionary)
Dim Database As DAO.Database
Dim Field As DAO.Field
Set Database = CurrentDb
For Each Field In Database.TableDefs(TableName).Fields
Debug.Print “★テーブル作成済———————★”
Debug.Print “OK Name:” & Field.Name
Debug.Print “OK DataTypeEnum(DataTypeEnumName):” & Field.Type & “(” & Dic(Field.Type) & “)”
Debug.Print “OK Size:” & Field.Size
Next
End Sub
“`
## 検証結果
実行した結果、定義されている定数のうち作成できたものと作成できなかったものは以下の通りです。
### 作成できたデータ型
– **添付ファイル データ**: `101` (`dbAttachment`)
– **バイナリ型データ**: `9` (`dbBinary`)
– **ブール型 (True または False) データ**: `1` (`dbBoolean`)
– **バイト型 (8 ビット) データ**: `2` (`dbByte`)
– **複数値バイト型データ**: `102` (`dbComplexByte`)
– **複数値 10 進型データ**: `108` (`dbComplexDecimal`)
– **複数値倍精度浮動小数点型データ**: `106` (`dbComplexDouble`)
– **複数値 GUID 型データ**: `107` (`dbComplexGUID`)
– **複数値整数型データ**: `103` (`dbComplexInteger`)
– **複数値長整数型データ**: `104` (`dbComplexLong`)
– **複数値単精度浮動小数点型データ**: `105` (`dbComplexSingle`)
– **複数値テキスト型データ (可変幅)**: `109` (`dbComplexText`)
– **通貨型データ**: `5` (`dbCurrency`)
– **日付型データ**: `8` (`dbDate`)
– **倍精度浮動小数点型データ**: `7` (`dbDouble`)
– **GUID 型データ**: `15` (`dbGUID`)
– **整数型データ**: `3` (`dbInteger`)
– **長整数型データ**: `4` (`dbLong`)
– **バイナリ型データ (ビットマップ)**: `11` (`dbLongBinary`)
– **メモ型データ (拡張テキスト)**: `12` (`dbMemo`)
– **単精度浮動小数点型データ**: `6` (`dbSingle`)
– **テキスト型データ (可変幅)**: `10` (`dbText`)
### 作成できなかったデータ型
– **テキスト型データ (固定幅)** (`18` / `dbChar`): 無効な処理です。
– **多倍長整数型データ** (`16` / `dbBigInt`): フィールドのデータ型が正しくありません。
– **10 進型データ (ODBCDirect のみ)** (`20` / `dbDecimal`): フィールドのデータ型が正しくありません。
– **浮動小数点型データ (ODBCDirect のみ)** (`21` / `dbFloat`): フィールドのデータ型が正しくありません。
– **数値型データ (ODBCDirect のみ)** (`19` / `dbNumeric`): フィールドのデータ型が正しくありません。
– **時刻形式のデータ (ODBCDirect のみ)** (`22` / `dbTime`): フィールドのデータ型が正しくありません。
– **時刻および日付の形式のデータ (ODBCDirect のみ)** (`23` / `dbTimeStamp`): フィールドのデータ型が正しくありません。
– **可変長バイナリ型データ (ODBCDirect のみ)** (`17` / `dbVarBinary`): フィールドのデータ型が正しくありません。
## 参考リンク
– [Microsoft Learn: DataTypeEnum 列挙型 (DAO)](https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/datatypeenum-enumeration-DAO)
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年10月7日
- 変更記事全体のレイアウトを崩れのないMarkdown形式のコードブロックと見出し構造に再構成しました。
- 追加Microsoft Learnの公式データ型リファレンスに基づいた最新の一次情報リンクに更新しました。
