〜Accessを直接読めなくても「中身をテキスト化」すれば解析できる〜
0. はじめに(概要)
Accessは 手軽に業務アプリケーションを作れるソフトウェアです。
一方で、長年の業務で蓄積された
「仕様書のない業務ロジック」 も詰まりがちなツールでもあります。
近年は ChatGPT などの LLM を使って、
- コードの意味を説明させる
- ドキュメントを自動生成する
といったことが可能になりました。
しかし、Accessについては一つ大きな制約があります。
ChatGPTに Access(.accdb / .mdb)をアップロードしても、
中身を直接解析することができない
(2026年2月時点:ChatGPT Plusプラン)
本記事ではこの前提を踏まえ、
Access の中身をテキストとして出力し、LLM で解析するための実用的な構成を整理します。
1. なぜAccessはそのまま解析できないのか
LLM(ChatGPT など)が直接扱えるのは、テキスト形式の情報が中心です。
SQL や VBA、Markdown、CSV などは、そのまま解析対象になります。
また、ChatGPT は内部的に Python 環境を用いて処理しているとされています。
そのため、Python から読み取れる形式については、実際に次の挙動が確認できます。
- CSV:内容を読み取り、列構造やデータを解析できる
- Excel(.xlsx):シートやセルの内容を読み取り、解析できる
- JSON:構造を保持したまま解析できる
一方、Access(.mdb / .accdb)は、生成AI にファイルをアップロードしても
テーブル定義やクエリ、VBA などの中身を確認できません。
これは Python 側で Access を扱うための環境やライブラリが
現時点では用意されていない可能性がある と考えられます。
2. 全体像:Access × LLM 解析の基本構成
直接解析できない Access ファイルも、
一度テキストに変換すれば LLM で解析可能になります。
Access → 構成情報をテキスト抽出 → LLM に渡す
3. LLM解析のためにテキスト化する対象
Access の構造を出力できる VBA コードは後述します。
今回のコードでは、以下を出力します。
※ ChatGPT にアップロードするため、UTF-8形式で出力します。
- 標準モジュール(VBA)
- クエリ(SQL)
- テーブル構造
- マクロ一覧
4. ChatGPTでできること
テキスト化した成果物を ChatGPT に渡すことで、次のことが可能になります。
- クエリ・VBA の処理内容の解説
- 業務ロジックの要約
- 冗長・危険な処理の指摘
- 仕様書・設計書の下書き作成
プロンプト次第で、さまざまな活用が可能です。
納得いく形になれば、プロンプト自体を公開するのも一つの選択肢です。
5. 注意点・運用のコツ
この仕組みは Access の VBA 機能を利用します。
- ❌ MDE / ACCDE(実行専用形式)では使用不可
- ✅ MDB / ACCDB(設計可能な形式)でのみ実行可能
6. まとめ
- ChatGPT は Access ファイルそのものは解析できない
- しかし
MDB / ACCDB から構造をテキスト化すれば、LLM で解析可能 - 本手法は
- 仕様不明な Access の棚卸し
- 業務ロジックの可視化
- 将来の移行・再構築検討
で特に有効
ブラックボックス化した Access を「読める資産」に変える
その第一歩として、実用的なアプローチです。
補足資料:Access構成をテキスト出力するVBAコード
以下は、Access 内の構成情報を
UTF-8 テキストとして一括出力するための VBA サンプルです。
Accessの標準モジュールに記載して実行してください
' モジュール変数
Dim exportPath As String
Sub ExportModulesAndMacroList()
Dim vbComp As VBIDE.VBComponent
Dim fso As Object
Dim macroFile As Object
Dim obj As AccessObject
Dim rawName As String
Dim safeName As String
Dim dbName As String, fileOnly As String
' 1. Accessファイル名からフォルダ名を作成
dbName = CurrentDb.Name
fileOnly = Mid(dbName, InStrRev(dbName, "\") + 1)
fileOnly = Left(fileOnly, InStrRev(fileOnly, ".") - 1)
exportPath = "C:\sun_mdb\" & fileOnly & "\"
' 2. 出力フォルダ作成
Set fso = CreateObject("Scripting.FileSystemObject")
If Dir(exportPath, vbDirectory) = "" Then MkDir exportPath
' 3. モジュールの出力(UTF-8形式)
For Each vbComp In Application.VBE.ActiveVBProject.VBComponents
rawName = vbComp.Name
safeName = CleanFileName(rawName)
Dim utf8Name As String
Select Case vbComp.Type
Case vbext_ct_StdModule
utf8Name = exportPath & safeName & "_UTF8.bas"
Case vbext_ct_ClassModule
utf8Name = exportPath & safeName & "_UTF8.cls"
Case vbext_ct_MSForm
utf8Name = exportPath & safeName & "_UTF8.frm"
End Select
Dim tempFile As String
tempFile = exportPath & "tmp_" & safeName & ".txt"
vbComp.Export tempFile
Dim tsIn As Object, tsOut As Object
Set tsIn = fso.OpenTextFile(tempFile, 1)
Set tsOut = fso.CreateTextFile(utf8Name, True, True)
Do Until tsIn.AtEndOfStream
tsOut.WriteLine tsIn.ReadLine
Loop
tsIn.Close: tsOut.Close
Kill tempFile
Next vbComp
' 4. マクロ一覧出力
Set macroFile = fso.CreateTextFile(exportPath & "マクロ一覧_UTF8.txt", True, True)
For Each obj In CurrentProject.AllMacros
macroFile.WriteLine obj.Name
Next
macroFile.Close
' 5. クエリとテーブル構造を出力
Call ExportQuerySQL
Call ExportTableStructure
MsgBox "作業終了:" & vbCrLf & exportPath
End Sub
Function CleanFileName(strIn As String) As String
Dim invalidChars As Variant
Dim c As Variant
invalidChars = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
For Each c In invalidChars
strIn = Replace(strIn, c, "_")
Next
CleanFileName = strIn
End Function
Private Sub ExportQuerySQL()
Dim qdef As DAO.QueryDef
Dim fso As Object
Dim outputFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set outputFile = fso.CreateTextFile(exportPath & "Access_SQL_UTF8.txt", True, True)
For Each qdef In CurrentDb.QueryDefs
If Left(qdef.Name, 1) <> "~" And Left(qdef.Name, 5) <> "MSys" Then
outputFile.WriteLine "▼クエリ名: " & qdef.Name
outputFile.WriteLine qdef.SQL
outputFile.WriteLine String(50, "-")
End If
Next
outputFile.Close
End Sub
Private Sub ExportTableStructure()
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim fso As Object
Dim outputFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set outputFile = fso.CreateTextFile(exportPath & "TableStructure_UTF8.txt", True, True)
For Each tdf In CurrentDb.TableDefs
If Left(tdf.Name, 4) <> "MSys" Then
outputFile.WriteLine "▼テーブル名: " & tdf.Name
For Each fld In tdf.Fields
outputFile.WriteLine " " & fld.Name & " (" & GetFieldTypeName(fld.Type) & ")"
Next
outputFile.WriteLine String(50, "-")
End If
Next
outputFile.Close
End Sub
Private Function GetFieldTypeName(typeCode As Integer) As String
Select Case typeCode
Case 1: GetFieldTypeName = "Boolean"
Case 2: GetFieldTypeName = "Byte"
Case 3: GetFieldTypeName = "Integer"
Case 4: GetFieldTypeName = "Long"
Case 5: GetFieldTypeName = "Currency"
Case 6: GetFieldTypeName = "Single"
Case 7: GetFieldTypeName = "Double"
Case 8: GetFieldTypeName = "Date/Time"
Case 10, 130: GetFieldTypeName = "Text"
Case 11, 205: GetFieldTypeName = "OLE Object"
Case 12, 203: GetFieldTypeName = "Memo"
Case 128, 204: GetFieldTypeName = "Binary"
Case 131: GetFieldTypeName = "Decimal"
Case Else: GetFieldTypeName = "Unknown (" & typeCode & ")"
End Select
End Function
タグ
#Access
#ChatGPT
#LLM
#VBA
#業務効率化
#レガシー解析