最近流行りの「ChatGPT」、イーロン・マスク氏らが率いるOpenAI社によって「GPT-4」も公開されましたが、それでもなおChatGPTの存在感は凄まじく、様々な場面で活用することができます。
Accessクリエイターにとって、VBAの実装をChatGPTを用いることで非常に簡単に、かつ素早く実現することができ、業務効率を飛躍的に向上してくれます。
以前にもChatGPTを用いてVBAコードを作成してみましたので、そちらの記事もご参考にしてください。
今回も、実務でAccess中のデータを抽出してExcelファイルへエクスポートする機能を実装する必要があり、せっかくの機会なのでChatGPTにそれを作成してもらうこととしました。
早速、どのような質問をし、どのようなVBAコードが作成されたかを見ていきましょう。
ChatGPTへの質問と回答
ChatGPTには次のような質問をしてみました。
Accessで「T_テーブル」のフィールドに「氏名」があり、「山田」という苗字の含まれるレコードを抽出し、ExcelファイルとしてエクスポートするためのVBAコードを教えて。Excelファイルは作成日を「YYMMDD」としてファイル名とし、ワークシートは「山田」にする。

この結果、ChatGPTからは図2に示すような回答が返ってきました。

以下は、Accessで「T_テーブル」のフィールドに「氏名」があり、「山田」という苗字の含まれるレコードを抽出し、ExcelファイルとしてエクスポートするためのVBAコードの例です。Excelファイルは作成日を「YYMMDD」としてファイル名とし、ワークシートは「山田」になります。
そしてVBAコードとして次のような結果が返されました。
Sub ExportDataToExcel()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fld As DAO.Field
Dim excelApp As Excel.Application
Dim excelWorkbook As Excel.Workbook
Dim excelWorksheet As Excel.Worksheet
Dim fileName As String
'Set database file path and name
Set db = OpenDatabase("C:\Users\username\Documents\example.accdb")
'Open the table and filter by last name "山田"
Set rs = db.OpenRecordset("SELECT * FROM T_テーブル WHERE 氏名 Like '*山田*'")
'Set file name and path for Excel export
fileName = "C:\Users\username\Documents\山田_" & Format(Date, "YYMMDD") & ".xlsx"
'Create new Excel application and workbook
Set excelApp = CreateObject("Excel.Application")
Set excelWorkbook = excelApp.Workbooks.Add
'Create new worksheet named "山田"
Set excelWorksheet = excelWorkbook.Sheets.Add(After:=excelWorkbook.Sheets(excelWorkbook.Sheets.Count))
excelWorksheet.Name = "山田"
'Copy field names to first row of worksheet
For Each fld In rs.Fields
excelWorksheet.Cells(1, fld.OrdinalPosition).Value = fld.Name
Next fld
'Copy data to worksheet
excelWorksheet.Range("A2").CopyFromRecordset rs
'Save and close Excel file
excelWorkbook.SaveAs fileName
excelWorkbook.Close
'Release Excel objects from memory
Set excelWorksheet = Nothing
Set excelWorkbook = Nothing
excelApp.Quit
Set excelApp = Nothing
'Close recordset and database
rs.Close
db.Close
End Sub
そこで、Accessで標準モジュールを作成し、上記のVBAコードをコピーしますが、この際、Accessファイルの保存先、作成されるExcelファイルの保存先は「C:\Users\usersname\Documents」となっていますので、適宜修正をします。また、上記VBA中のAccessファイルの名前は「example.accdb」となっていますが、これも実装したいAccessファイルの名前に修正します。
次に、VBAの中でDAOを用いていますので、参照設定としてMicrosoft DAOライブラリーを追加してください。
一通りの修正とライブラリー設定が完了した後、VBAコードの処理を実行すると、実はエラーが発生します。
発生したエラーの確認
一つ目は、変数宣言のエラーとして以下3つが対象エラーとなります。
Dim excelApp As Excel.Application
Dim excelWorkbook As Excel.Workbook
Dim excelWorksheet As Excel.Worksheet
これら変数宣言は、As以下を「Object」にしてください。
二つ目は、「excelWorksheet.Cells(1, fld.OrdinalPosition).Value = fld.Name」というコードでエラーが発生します。
これは、「fld.OrdinalPosition」で取得される値は「0」からとなりますが、セルの番地に「0」を指定することができないことによります。
そこで、コードを次のように修正します。
「excelWorksheet.Cells(1, fld.OrdinalPosition + 1).Value = fld.Name」
修正版のVBAコードの確認
改めて実行可能なVBAコードを示します。
Sub ExportDataToExcel()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fld As DAO.Field
Dim excelApp As Object
Dim excelWorkbook As Object
Dim excelWorksheet As Object
Dim fileName As String
'Set database file path and name
Set db = OpenDatabase("C:\Users\usersname\Documents\example.accdb")
'Open the table and filter by last name "山田"
Set rs = db.OpenRecordset("SELECT * FROM T_テーブル WHERE 氏名 Like '*山田*'")
'Set file name and path for Excel export
fileName = "C:\Users\usersname\Documents\山田_" & Format(Date, "YYMMDD") & ".xlsx"
'Create new Excel application and workbook
Set excelApp = CreateObject("Excel.Application")
Set excelWorkbook = excelApp.Workbooks.Add
'Create new worksheet named "山田"
Set excelWorksheet = excelWorkbook.Sheets.Add(After:=excelWorkbook.Sheets(excelWorkbook.Sheets.Count))
excelWorksheet.Name = "山田"
'Copy field names to first row of worksheet
For Each fld In rs.Fields
MsgBox fld.Name & fld.OrdinalPosition
excelWorksheet.Cells(1, fld.OrdinalPosition + 1).Value = fld.Name
Next fld
'Copy data to worksheet
excelWorksheet.Range("A2").CopyFromRecordset rs
'Save and close Excel file
excelWorkbook.SaveAs fileName
excelWorkbook.Close
'Release Excel objects from memory
Set excelWorksheet = Nothing
Set excelWorkbook = Nothing
excelApp.Quit
Set excelApp = Nothing
'Close recordset and database
rs.Close
db.Close
End Sub
以上の修正が終わった後に再度VBAコードを実行してみてください。すると、今度は処理が上手く実行され、「山田」が含まれるレコードのみExcelファイルにエクスポートされ、条件に沿ったファイル名としてExcelファイルが作成されたと思います。
このようにして、ChatGPTを活用することで、AccessからExcelファイルをエクスポートするVBAコードも容易に実装することができるようになりました。
ChatGPTで完璧なVBAコードを作成することはまだまだ難しい部分もありますが、それでもほとんど間違いなく、少しの修正でこれだけの処理のコードを素早く作成してくれますので、業務ルーチンなどのためにVBAコードを実装することのハードルがかなり下がったのではないでしょうか。
まとめ
今回は、ChatGPTを用いて、Access中にあるデータをExcelファイルにエクスポートし、作成されたExcelファイルの名称も条件に沿って付与するというVBAコードを作成してみました。
質問方法も至ってシンプルなものでしたが、それでも返された回答にほとんど間違いはなく、ChatGPTが大変便利であることが示されました。
職場でChatGPTを用いるということに対して様々な議論を呼んでいますが、機微な情報等をChatGPTに載せるようなことはせず、要点だけを抑えて質問をしていくだけでも適切な回答は得られると思います。今後はますますこのようなAIツールを上手く活用することで業務効率を改善していくと良いのではないでしょうか。
今の時代、VBAに限らずプログラミングができるということは、当然のスキルとして広く社会で認知されています。いまだプログラミングが十分にできないという人は、今からでも遅くありません。できるだけ早く基本的なプログラミングスキルを習得することをお勧めします。
ご自身にあった専門書を参考に、実践的なプログラミング・データベース・サーバ、データ分析・機械学習など、システムエンジニアや今後を担うDX人材に必要とされているスキル獲得に向けて基礎から学んでいくことが大切です。
最初につまずきがちな点も、書籍を読みながら試行錯誤して課題解決していくことで、自身のスキルアップを目指すことができます。思い立ったが吉日、是非業務効率の改善に向けてプログラミング学習に勤しんでください!
スポンサーリンク



コメント