最近流行りの「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人材に必要とされているスキル獲得に向けて基礎から学んでいくことが大切です。
最初につまずきがちな点も、書籍を読みながら試行錯誤して課題解決していくことで、自身のスキルアップを目指すことができます。思い立ったが吉日、是非業務効率の改善に向けてプログラミング学習に勤しんでください!
スポンサーリンク
コメント