【ACCESS VBA】DAO.DataTypeEnumで生成できるデータ型一覧、生成できないデータ型一覧

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

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の公式データ型リファレンスに基づいた最新の一次情報リンクに更新しました。

文書情報

記事タイトル
【ACCESS VBA】DAO.DataTypeEnumで生成できるデータ型一覧、生成できないデータ型一覧
作成日
更新日
Source URL
https://papanda925.com/?p=642

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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