ChatGPTを業務改善に使ってみたいけど、何をすればいいかわからない。
ChatGPTがすごいというのは知っていても、業務で使いこなせていないという人が多いのではないでしょうか。検索代わりに使ってみたり、ちょっとした文章を作らせたりするものの、効率化できず活用できていないという人が多いと思います。
個人的にChatGPTの業務活用は、VBAと組み合わせるのが最も効果的だと思っています。ChatGPTでVBAを作成することで、基礎的な勉強をほとんどすることなく、VBAでの効率化ができます。
本記事ではループ処理を参考に、ChatGPTを活用してVBAコードを簡単に作成する方法を解説します。
ぜひこの記事を参考に、流行りのAIによる効率化を実践してみてください!
ChatGPTを活用してVBAコードを作成する手順
ChatGPTを使ってVBAを作成するには、VBAの環境設定を含めて大きく4つのステップがあります。
環境設定→ChatGPTで作成→修正→実行
次はプロンプトを交えながら順番に開設していきます。
【環境設定】Excel環境設定を行う
VBAを使用するには、まずExcelの開発環境を整える必要があります。すでに環境リボンが表示されていて、VBAをどこから書き込むかがわかっている方は次のステップに進んでください。
まだ環境リボンが出ていない人、VBAの追加の仕方がわからない人は、以下の記事を参考に、環境設定を済ませておきましょう。
ChatGPTにコード作成を指示する
ChatGPTに指示する言葉のことを、プロンプトと呼びます。コードを作成する際は、どのようなプロンプトを使うかが重要となってきます。
ChatGPTでVBAを作成する際は、以下のようなプロンプトを活用すると、スムーズにコードを生成できます。
プロンプト例
「{}を行う、VBAコードを作成してください。
保存先は{}とし、ブック名は{}、シート名は{}としてください。
・条件1
・条件2
・………
動作のフローと使い方も併せて作成してください。」
どういった動作をするVBAを作成するかをはじめに書き、保存先・ブック名・シート名必要であれば、どこのセルから始めるかも合わせて書いておくと、この後の修正が楽になります。
基本的には例で挙げたプロンプトの{}の中に、指示と必要な保存先などを記載すればOKです。
さらに、動作のフローと使い方の作成を指示することで、フローを読むだけでどういった動作をするかがわかるようになります。
動作フローとコードの日本語の部分だけを読む
まずはフローを読み、余計な動作や必要な動作の抜けがないかを把握しましょう。
確認すべきポイント
- 不要な動作が入っていないか
- 必要な動作が抜けていないか
- 動く順番と動作する場所(セル)は正しいか。
- 保存先のパスが正しいか
- シートやブック名が実際のデータと一致しているか
修正箇所が見つかれば、次にコードの日本語部分を読んでいきます。
そして自分でコードの修正ができそうであれば修正を行います。ただ、コードの書き方はわからないという方も多いと思います。
その場合は、「○○の部分を、△△のように修正してください」と修正の指示を出せばOKです。
コードを書き込んでステップ実行してみる
コードが正しいか確認するには、VBAのステップ実行を利用します。デバッグを行うことで、エラー箇所や動作を詳細に確認できます。
ここで最も注意すべき点は、VBAを実行した後は戻るボタンでは戻れないという点です。必ずデバッグ前にバックアップとして別の場所にエクセルを保存しておくようにしましょう。
ステップ実行の手順
- VBAエディターを開く
- 対象のコードの先頭にカーソルを置き、F8キーを押す
- 1行ずつ実行し、動作を確認する
デバッグの詳細は別記事でもまとめています。ほかのVBAを作成する際も参考になる内容ですので、わからない方はチェックしておいてください。
VBAでシートのループ処理を行う基本例
ここからはループ処理を例に実際にコードを作成していきます。
日ごとの売り上げがシート毎になっているエクセルに、まとめシートを作るVBAをサンプルとして作成してみます。
【完成コード】複数のエクセルシートをまとめるコード
最終的に作成されるVBAは以下の通りです。
これをコピペすれば、すべてのシートをまとめるVBAとして使用することも可能です。
Sub 集約シート作成()
Dim ws As Worksheet
Dim summarySheet As Worksheet
Dim pasteRow As Long
Dim sourceLastRow As Long
Dim sourceLastCol As Long
' まとめシートを準備
On Error Resume Next
Set summarySheet = ThisWorkbook.Sheets("まとめシート")
On Error GoTo 0
If summarySheet Is Nothing Then
Set summarySheet = ThisWorkbook.Sheets.Add
summarySheet.Name = "まとめシート"
Else
summarySheet.Cells.ClearContents
End If
pasteRow = 1 ' 初期貼り付け行を設定
' 各シートをループ処理
For Each ws In ThisWorkbook.Sheets
If ws.Name <> "まとめシート" Then
' データ範囲を取得(最終行と最終列を特定)
sourceLastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
sourceLastCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column
' シート名ヘッダーを追加
summarySheet.Cells(pasteRow, 1).Value = "シート名: " & ws.Name
pasteRow = pasteRow + 1
' データをコピー&ペースト
ws.Range(ws.Cells(1, 1), ws.Cells(sourceLastRow, sourceLastCol)).Copy
summarySheet.Cells(pasteRow, 1).PasteSpecial Paste:=xlPasteValues
' 貼り付け後の次の行を計算
pasteRow = summarySheet.Cells(summarySheet.Rows.Count, 1).End(xlUp).Row + 2
End If
Next ws
' 完了メッセージ
MsgBox "すべてのシートのデータが集約されました。", vbInformation
End Sub
①ChatGPTにコード作成を指示
今回は、日ごとに分かれてるシートをまとめて、「まとめシート」を新たに作るVBAを作成します。
初めの指示は次の通りです。
各シートのデータを1つのシートに集約するVBAコードを作成してください。 ブック名は「売上集計.xlsx」とし、集約するシート名は「まとめシート」としてください 動作のフローと使い方も併せて作成してください
この指示で、フロー/使い方/コードが自動作成されます。
まずはフローだけを見て、修正箇所を確認します。
②動作フローとコードの日本語の部分だけを読む
今回作成された動作フローは以下の通りです。
動作のフロー
①「売上集計.xlsx」を開く
マクロが動作するブックは「売上集計.xlsx」とします。
②「まとめシート」を準備する
「まとめシート」が存在する場合は内容をクリア。
存在しない場合は新規作成します。
③全シートをループ処理
集約対象のシートを1つずつ選びます(ただし、「まとめシート」は除外)。
④データをコピー&ペースト
各シートのデータを「まとめシート」に転記します。
⑤終了
データの集約が完了します。
今回は初めからエクセルを開いているので、『①「売上集計.xlsx」を開く』のフローは不要です。
なのでコードの修正指示をかけます。
エクセルブックは開いていることが前提のため、
『①「売上集計.xlsx」を開く』のフローは削除してコードを作成してください。
この指示により、フローから『①「売上集計.xlsx」を開く』が削除されます。
③コードを書き込んでステップ実行してみる
作成されたコードをエクセルに書き込み、ステップ実行してみます。
今回作成されたコードを実行してみると、一行しか転記されませんでした。
受注番号以外のデータも転機したいので、新たに指示を追加して、コードを修正していきます。
作成されたコードでは、各シートの1列しか転記されませんでした。
すべての列のデータが転記されるよう、コードを修正してください。
こうしてできたVBAを実行した結果が、次の画像です。
今回は、元リストの開始位置が2行目だったことから、最終行・最終列の取得開始の位置を1行目から2行目にずらすコード修正を手動で行いました。
もちろんこれもChatGPTにコード修正させることも可能です。ただVBAで非常によく使うコードのため、以下記事を参考に知識として知っておいていただくと、かなり効率が上がります。
VBAでブックのループ処理を行う基本例
次に複数のブックからデータを集約します。
先ほどシート毎に分かれていたデータが、ブック毎に分かれていて、それを一つにまとめることを想定します。
【完成コード】複数のエクセルブックをまとめるコード
最終的に作成されるVBAは以下の通りです。
これをコピペすれば、フォルダに入ったブックをまとめるVBAとして使用できます。
Sub AggregateDataFromWorkbooks()
Dim folderPath As String
Dim fileName As String
Dim wb As Workbook
Dim wsSource As Worksheet
Dim wsDestination As Worksheet
Dim lastRow As Long, lastCol As Long
Dim destRow As Long
' フォルダパスの指定
folderPath = "C:\**\uriage"
If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
' 集約先の「まとめシート」指定
Set wsDestination = ThisWorkbook.Sheets("まとめシート")
destRow = wsDestination.Cells(wsDestination.Rows.Count, 1).End(xlUp).Row + 1
' フォルダ内の最初のファイルを取得
fileName = Dir(folderPath & "*.xls*")
' フォルダ内のすべてのブックをループ
Do While fileName <> ""
' ブックを開く
Set wb = Workbooks.Open(folderPath & fileName)
' 各シートをループ
For Each wsSource In wb.Sheets
' 最終行と最終列を取得(2行目以降)
lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
lastCol = wsSource.Cells(2, wsSource.Columns.Count).End(xlToLeft).Column
' データをコピーして「まとめシート」に貼り付け
If lastRow >= 2 Then
wsSource.Range(wsSource.Cells(2, 1), wsSource.Cells(lastRow, lastCol)).Copy
wsDestination.Cells(destRow, 1).PasteSpecial Paste:=xlPasteValues
destRow = wsDestination.Cells(wsDestination.Rows.Count, 1).End(xlUp).Row + 1
End If
Next wsSource
' ブックを閉じる
wb.Close SaveChanges:=False
' 次のファイルを取得
fileName = Dir
Loop
' 終了メッセージ
MsgBox "データの集約が完了しました。", vbInformation
End Sub
プロンプト例
今回はフォルダに入っているエクセルブックをまとめるので、プロンプトにもフォルダのアドレスを入れて指示を行います。
さらに先ほどのシートをまとめるコードで修正した、
①ブックを開いている前提にする
②すべての列を転記する
という二つの条件を追加します。
この内容を盛り込んだプロンプトが次となります
各ブックのデータを1つのシートに集約するVBAコードを作成してください。 ・ブックはc:\***\uriageのフォルダに入っているすべてのブックとして下さい。 集約するシート名は「まとめシート」としてください。 ・まとめシートがあるエクセルは開いていることを前提にしてください。 ・各ブックのすべての行・列が転記されるように最終行と最終列を取得してください。 最終行と最終列を取得する際は、2行目から取得してください。 動作のフローと使い方も併せて作成してください
今回は指示が明確だったので、1回の指示で以下のようなシートを作るvbaを作成することができました。
まとめ:ChatGPT × VBAが最強
メールのリライトやプレゼン原稿の作成など、ChatGPTでできる業務改善はたくさんあります。ただ、時短効果で考えると、VBAやプログラミング作成が、圧倒的に効果的な分野だと思います。
そもそも、VBA自体の学習時間を節約できる事が大きなメリットで、さらにコーディングの時間やデバッグなど、様々な時間が節約できます。加えて作成されたコードもコメントがしっかり入って見やすいため、後からの編集も効率的に行うことができます。
ChatGPTとVBAを組み合わせることで、学習時間や作業時間を大幅に短縮できるのは間違いありません。
ChatGPT×VBAを前提として、このサイトの内容を今後もぜひ活用してみてください!
コメント