![](https://miya-mitsu.com/fire/wp-content/uploads/2023/09/疑問に思う人.webp)
誰が作ったか分からないエクセルマクロ。
修正したいが解読不能!
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/09/メモ ねこ.webp)
ChatGPTを使えば、瞬時にVBAの問題を解決できます!
職場で代々受け継がれる誰が作ったか分からないエクセルマクロですが、それを修正したいときにどのように手を付けてよいかが分からないものです。
実際によくある困りごとです。
大昔に誰かが作った呪文のようなマクロでもChatGPTを活用すればVBA初心者でも瞬時に簡単に解決できますので、その方法をお伝えしたいと思います。
例:Yahoo知恵袋での実際の悩み
例として、実際にYahoo知恵袋で相談されていたマクロの悩みについて、ChatGPTで瞬時に解決する方法をお伝えしたいと思います。
実際にあった悩みは下記です。
- マクロの悩み相談
-
- 前任者より代々受け継がれている
- データが重くマクロ完了までに時間がかかる
- 相談:マクロ完了までの進捗が分かるバーの機能を追加したい
※悩みの全文(コード含む)は下記に書いています。興味のある方はクリックで開いてみてください。
※Yahoo知恵袋より抜粋「https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11257406006」
前任者より、代々受け継がれているExcelのマクロブックがあります。 複数のCSVファイルを一つのブックに集約するマクロです。 複数のCSVファイルは具体的に1日1ブックがり 半期分(183日分、183ブック)を別のブックに取り込みするマクロです。 引継ぎを受けた際に、半期分のデータを取り込むのに時間がかかるとのことで 半期分のデータを取込む際に進捗状況を可視化したいです。 ユーザーフォームで進捗バーの作成(画像を参照ください)を するのはなんとかできそうですが その後のマクロコードをどのように書けばいいのかわかりません。 私は簡単なコピペ作業のコードなら作成できるレベルでまだまだVBA初心者です。 実際の引き継いだマクロコードは以下です。 ちなみに250箇所ある施設の5秒データを1時間値に修正するマクロです。
Sub 情報データ抽出()
Dim DIR_PATH As String: DIR_PATH = ThisWorkbook.Path & “/情報データ”
Dim file_name As String, file_path As String
Dim i As Long, day As Long, ave As Long
Dim WB1 As Workbook, WB2 As Workbook
Application.ScreenUpdating = False
day = 1
Set WB1 = ThisWorkbook
file_name = Dir(DIR_PATH & “\*.csv*”)
Do Until file_name = “”
file_path = DIR_PATH & “\” & file_name
Application.DisplayAlerts = False
Workbooks.Open file_path
Set WB2 = ActiveWorkbook
For j = 2 To 251
For i = 1 To 24
ave = Application.worksheetfunctin.Average(Range(Cells(1 + i * 720 – 719, j), Cells(1 * i * 720, j)))
WB1.Worksheets(“マクロ数値抽出”).Cells(5 + i + 24 * (day – 1), j).Value = ave
Next
Next
WB2.Close
Application.DisplayAlerts = True
file_name = Dir
day = day + 1
Loop
MsgBox “情報データの抽出が終了しました。
” Application.ScreenUpdating = False
End Sub
言葉足らずなところがありましたら、申し訳ありません。 どなたか、ご教授ください。 よろしくお願い致します。
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/09/考え事 ねこ.webp)
初心者にとっては、かなり難易度が高いです・・・
ChatGPTでマクロの悩みを初心者でも解決できる!
ChatGPTは多くの文献やプログラムを学習しているので、かなり複雑なマクロでなければ、質問するだけで解決してくれます。
ここでは「ChatGPTの4つのすごさ」を紹介します。
- CahtGPTの4つのすごさ
-
- 【解説】 VBAのコードを1行ずつ解説
- 【代役】 コードを書いてくれる
- 【解決】 エラーを解決してくれる
- 【提案】 さらに良いコードを提案
【解説】 VBAのコードを1行ずつ解説
ChatGPTは他人が作ったVBAコードでも分かりやすく解説してくれます。
やり方はChatGPTにコードを把握させたのちに、魔法の呪文(プロンプト)を投げかけるだけです。
コードについて、1行ずつ、Copycodeを使ってVBA初心者が分かるように教えてください
Copycodeとは、ChatGPTが解答する際に使う黒いボックスのことです。コードと解説文が色分けで見分けやすくなります。
そうすると、ChatGPTは下記の様に、1行ずつ、丁寧に教えてくれます。
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/10/image-1.png)
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/09/メモ ねこ.webp)
もし分かりにくいところがあったら、その箇所をコピー&ペーストし「さらに詳細に教えて」とChatGPTに聞けば詳しくおしえてくれます
【代役】 コードを書いてくれる
VBAでやりたいことをChatGPTに伝えれば、自動でVBAコードを既存のコードに追記してくれます。
やり方は下記のような指示をChatGPTに投げかけるだけです。
コードに「〇〇の機能」を追加してほしい
今回の例であれば、コードに「データを取込むのに時間がかかるので、マクロの進捗状況を可視化できるようなタイムバー機能」を追加してほしいと、ChatGPTに伝えることになります。
そうすると、ChatGPTは数秒でコードを作ってくれます。
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/10/image-2.png)
【解決】 エラーを解決してくれる
マクロの動作エラーは初心者には天敵ですが、ChatGPTに相談すればその要因と解決コードを作成してくれます。
エラーコード1004が発生。系列の書式が長すぎると表示された。
その要因と、対策済のコードを教えてほしい。
そうすると、ChatGPTがエラーの原因と対策済のコードを教えてくれます。
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/10/image-5.png)
もし、エラーの難易度が高くてChatGPTですぐに解決できない場合は、エラーの内容や箇所を詳しくChatGPTに伝えていきましょう。うまくChatGPTと会話し要因を深堀していけば、解決の糸口が見つかりやすくなります。
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/09/考え事 ねこ.webp)
ChatGPTでもすぐに解決できないときがある
【提案】 さらに良いコードを提案
ChatGPTは、既存のVBAコードよりも、さらに良いものを提案することができます。
今回のYahoo知恵袋の相談者は、マクロ処理に時間がかかりすぎるというそもそもの課題を持っていました。これをChatGPTに相談して解決してみましょう。
VBAのコードを工夫すれば、処理速度を上げることはできますか?
その工夫を反映させてコードを書き替えてほしいです。
このような質問を投げかければ、数十秒後にはChatGPTが処理速度が速くなる構文を提案してくれます。
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/10/image-6.png)
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/09/考え事 ねこ.webp)
ここまでくると感動・・・
ChatGPTで効率の良い業務を
![](https://miya-mitsu.com/fire/wp-content/uploads/2023/09/4cca4756538925ced48c85d991101ffb-1024x594.webp)
他人が作ったマクロを独自で修正しようとした場合、うまくいかないと数時間、悩むことになります。
ChatGPTを活用すると、初心者でもすぐに解決の糸口を見つけることができます。
以上となります。効率の良い業務に繋がれば幸いです!
ここまで読んで頂きありがとうございました。
コメント