マクロ初心者がchatGPTで業務効率化マクロを開発した話

2023年5月27日土曜日

chatGPT VBA マクロ

t f B! P L


マクロ初心者がchatGPTで業務効率化マクロを開発した話



これは私が、chatGPTでExcelマクロで業務を効率化させた話です。

Excelマクロ導入の背景

私は、部署で新設されたDXチームに所属しています。DXとは名ばかりで、IT部門と連携をとりながらシステム導入したり、簡単なBIを作成してみたり、エクセルで属人化している業務の効率化を企画推進することもあります。今回の業務もその一環でした。

所属する部門は、かなりエクセルを多用していて、業務に合わせて過去からカスタマイズを重ねた結果、かなり複雑な処理をエクセルで行なっていました。またこのエクセル業務が、属人化していて、特定の人に負荷がかかっていたことが部署としても課題でした。よくある事例だと思いますが、こういった場合、そもそものプロセスを見直しながらもシステム導入で対応することがセオリーだと思います。

しかしながら、困ったことに、大きい部署が故に内部の統制が取りにくく、似たようなシステムが各々導入されていて、まずはそこの交通整理から始める必要があったので、すぐさま脱エクセルには着手出来ませんでした。ただ、近々にでも、エクセル業務を少しでも楽にしたいという担当者の思いまたは上司の圧力(笑)から、Quick Winという位置付けで、マクロを導入することになり、導入推進役として、DXチームから私が拝命されました。そんなことはDXでも何でもないんですけどね!!笑


chatGPTでマクロ開発することになる経緯

作業者から具体的に話を聞いてみると、思った以上に複雑で、私自身Pythonの経験はありますが、マクロは全くの初心者だったので、その時は自分でやるという選択肢は捨て、専門会社をに依頼することを選びました。

選ぶにあたっては特にこだわりなく、webサイトでヒットした2、3社に連絡をとり、返信のあった会社とやり取りを開始することになりましたが、この会社選定が今回のターニングポイントの一つとなりました。助言としては、取引先の選定は、調達部門やIT部門など、有識者にも相談しながら実績と信頼のおける会社を選びましょう!笑

やり取りを始めた当初は、何も問題なく、要件定義を双方につめていました。しかし、1ヶ月半を過ぎたあたりでしょうか。取引先とのやり取りが途絶えてしまい、全く連絡が出来なくなってしまいました。まだ契約前だったのが幸いですが、この時点で活動開始から1ヶ月半たっていて、あとは開発を始めるだけのタイミングだっただけに、非常に困りました。

また取引先候補を探して、秘密保持を結んで、要件を整合して、というプロセスをほぼ一からやり直すのかと考えると気が重くなりましたし、あらためて開発依頼のプロセスを見直すと、この1ヶ月半で自分がしたことに何の価値があったのだろうと思いました。
もちろん、業務としては然るべきプロセスなんですが、自分は何かスキルアップ出来たのか?と考えると答えはなく、ただ取引先と業務担当者の仲介をしてるだけでは、自分のためにならないと感じました。
また同じプロセスを辿って時間をかけるぐらいなら、自分で開発してみた方が、早く成果も見えやすいし、要件が変わっても柔軟に対応出来るし、社内に開発ノウハウが残れば、運用後の改修や横展開も可能になるのでは?と考えました。

とはいえマクロに限っては初心者です。
ダメもとで上司に相談したところ、上司からは、まずは1週間やってみろ、その1週間で開発可能性を判断しろと言われ、幸いにも内製化のチャンスをもらいました。チャンスをもらったといえ、マクロ初心者です。何から始めればいいのか、本当にコードが書けるのか、疑心暗鬼になっていたところ、chatGPTなるものを耳にしました。このchatGPTは、ただの会話ボットではなく、文章要約や翻訳、アイディア創出、そして何とマクロ含めたプログラミングを自然言語をもとに生成してくれるとのことです。幸いにも趣味ながらもPythonの経験があり、オブジェクト指向のプログラミングには慣れていたので、プログラミングを意識したフローを言語化出来れば、それをもとにchatGPTでマクロ生成ができるだろうと考えました。

こうして私のchatGPTを利用したマクロ開発が始まりました。


chatGPTでマクロ開発

上司の指示で、まずは一週間で開発可能かどうかの目途を立てる必要がありました。そのため、簡単なところから着手するのではなく、最もマクロ化が難しいであろう作業から着手しました。まずは最初に取り掛かったことは、作業の言語化です。言語化に関しては、専門会社に頼むことを想定してある程度の言語化をしていたので、もう少しステップを分解して、各ステップでどういう作業を行うのか具体的に言語化しました。個人的にここのchatGPTに投げる前の言語化は非常に大切ですし、難しい作業かと思います。

言語化の後は、chatGPTに投入です。投入に特別なプロンプトは利用してなく、「以下のフローをマクロ生成してください」程度しか指示していません。チャットGPTが想像以上に有能で、言語化された内容に合わせてマクロを生成してくれます。とはいえ、生成AIが絶対正解ではないですし、投入されたプロンプト(言語化されたフロー)に不足があれば当然、意図するマクロは生成されません。生成されたマクロが狙い通りに機能するかは、実際に動作検証をしてみて、どこに不備や不足があるかを確認し、修正したことをまた言語化して、その内容をもとにマクロをchatGPTに修正してもらう必要があります。

マクロにどれだけ精通しているか、chatGPTにどれだけ使い慣れているかで、試行回数は異なると思いますが、言語化→マクロ生成→検証→言語化を何度も繰り返しながら、機能するマクロを作りあげることになります。基本的にこの流れで、マクロ開発を行うことになりますが、その過程で困ったことを2点とりあげます。

まず一つは、chatGPTが文法的に間違っているマクロをまれに生成するということです。マクロに精通していれば間違いに気づけますが、私のような初心者はそれに気づかずに、なぜエラーが発生するのか、延々とエラーの沼にハマることがあります。なので、100%chatGPTに頼るのは危険で、chatGPTが生成されたコードで特にエラーの原因と推測されるステートメントに関しては、文法を理解することを平行して行いました。こうすることで、マクロの知識も蓄積しながら、chatGPTの噓生成に対する感度を高めていきました。

二つ目に困ったことは、マクロのエラー通知がやや情報不足な点です。Pythonだと割と細かいエラー表示されるのですが、マクロは、エラーが発生しているステートメントがハイライトされて、エラー原因が一言表示される程度です。エラーの対処はchatGPTで解決出来ることもありますが、そもそもチャットGPTで生成されたコードのため、エラー表示に対しチャットGPTでは正しいステートメントを生成することが難しいようで、エラーが発生するから修正してと指示しても、同じ内容のステートメントを繰り返し生成することがありました。

ここでも結局は、自分自身の理解度を上げるしかなく、エラー発生前後を文法から理解した上で、対処していきました。チャットGPTとの試行錯誤を繰り返しながらも、自身のマクロスキルもあげることで、最終的に業務導入可能なマクロを開発しました。未経験ながらもマクロ開発することは、かなりチャレンジだったと思いますが、チャットGPTというテクノロジーの力もかりつつ、何とか目標を達成出来ました。

この経験を通じて、マクロ開発のスキルを高めただけでなく、チャットGPTを利用するためのノウハウも蓄積出来たと思います。


chatGPTによるマクロ開発のTips共有

参考までに、今回の開発経験を通じたTipsをご紹介します。
マクロ生成
  • マクロ化したい作業の一つ一つ言語化する。その上で、プロンプトは箇条書きにフローを示す(作業が長い場合は特に推奨)。
  • 具体的に示す(列や行、作業対象となるテーブルのヘッダー、セル番地、何をするのか等)
  • 作業が複雑な場合は、最初から全フローを言語化しマクロ生成するのではなく、作業ブロックに分けて生成する
  • 生成されたマクロの意味が分からない場合は、chatGPTに不明なマクロの詳細を説明してもらう。意図した動作になっていなければ、修正内容を指示し、マクロをモディファイしてもらう。
  • マクロの関数や文法を理解したい時に説明してもらう
  • 具体的なコードの作り方や使用例を教えてもらう(私は、クラスの作成方法やクラス間で変数をやり取りする方法を教えてもらいました)
  • エラー対応
  • エラーが発生した場合は、エラーコメントとエラーが発生しているステートメントから修正方法を提案させる
  • 作成したマクロで発生しうるエラーを考えさせ、その対策を講じたマクロにモディファイさせる

反省点や学びの共有

また最後に、この経験を通じた反省点や学びを共有します。

フレームワークで開発コードのサンプルを入手する。

私は基本的に文章でマクロの流れ作り、chatGPTにコードを生成してもらっていました。この方法だと、文章の作りこみが甘いと生成されるコードも意図しないものになりやすくなります。私はここで結構苦戦して、文章修正とコード生成を何度も繰り返しました。実はプロンプトのコツとしては、こんな感じで作ってほしいと具体例を挙げることで、よりイメージに近いコード生成が可能になります。そういう意味では、webサイトから探すのも良いですが、情報がまとまっているフレームワークを利用することが望ましいと思います。私が何度も文章修正とコード生成を繰り返した作業は、具体的な作成イメージを提供することでもっと効率化できたと思います。

英語で情報収集

chatGPTだけでは立ち行かないことがやっぱりあり、webでコードの書き方を情報収集することが多々ありました。私は英語が得意な方ではないので、初期は日本語でweb検索していましたが、思うような情報が入手出来ないことがありました。それは、sumifsの使用例なんですが、一つの項目に複数の条件が伴う場合の集計方法は日本語サイトでは全然見つからず、ふと思い当って英語で検索するとすぐに見つかったのでビックリしました。改めて英語でマクロの情報を調べてみると、海外ではPythonやデータサイエンス系もそうですが、マクロに関する情報は日本語よりずっと豊富なため、分からないことが日本語で見つからなければ英語検索することをお勧めします。

掲示板の活用

上記で挙げた方法は、結局は自力で調べる方法です。自力で調べることは、自分のスキルアップには繋がるかもしれませんが、効率的でない場合もあります。なのでやっぱり一番頼れるのは人だと思います。身近にマクロに精通した方がいればいいですが、そうでない場合は、web上の掲示板を利用するのが良いと思います。マクロでは質問投稿したことないですが、他言語ではよく投稿していました。web掲示板を上手く活用するためのポイントとしては、自分が何をしたいのか、どこでスタックしているのか等を分かりやすく文章で説明する必要があります。ある意味そこは、chatGPTのプロンプト作成と似ていて、相手に伝わるように自分の思考を言語化することが大切です。

chatGPTは万能ツールではない

chatGPTを否定するつもりはなく、むしろ歴史的な大発明だと思いますし、chatGPTは超優秀なツールです。そう、今の段階ではあくまでもツールなんです。プロンプトの質とアウトプットの質は比例関係に近いと思います。そのため、期待する結果を得るには、自分の得たいことを正確に分かりやすく、漏れなく伝えることが大切ですが、それは現実的に難しいことだと思います。なので一度のやり取りで完璧なものを求めず、chatGPTとのやり取りと繰り返しながら、理想像に近づいていくことが大切です。ただこれはこれで結構根気のいる作業だとは思います。

業務を見直す

これを基本はファーストステップとするべきですが、現実的にはそうでない印象です。業務が複雑化したからマクロで効率化したいという発想は危険だと思っています。マクロ化は業務をより複雑化かつ属人化、ブラックBOX化する方向に導きかねません。業務の効率化のためには、マクロを導入することでなく、複雑な業務をまずはプロセスから見直すことが打ち手になるべきです。ただ、たいてい場合は、実務担当者の発想としては、そうはならず、なぜかデジタル化というだけで、マクロなりRPAを導入したがる傾向が強いと思います。結果的にもっと業務が複雑になることはよく聞く話です。


今回は、経験談がメインでしたが、チャットGPTを利用したマクロ開発の具体的な事例やチャットGPTのプロンプトのこつも別の機会で紹介出来たらと思います。

ご拝読ありがとうございました。

ブログ アーカイブ

Profile

自分の写真
30代、4歳と2歳の男の子のパパ。 製造メーカーに需給調整部門に所属し、ICTを活用した業務効率化や業務変革の提案や推進を担当。 このブログでは機械学習やビジネスインテリジェンスなど、データ分析に関する情報を主に取り扱う。

QooQ