生成AI活用研究
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック

Geminiを中心に生成AIの活用と研究の記録
公開日:2025-05-19 最終更新日:2025-05-23

第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック


第2章では、Excel VBAの基礎の基礎に触れ、実際にコードを動かす体験をしました。そして、エラーが出た時にもAIが助けてくれるらしい、という心強い存在を知りました。
この第3章では、まさにその頼りになる存在であるAIを、あなたのExcel VBA学習や業務自動化の強力なパートナーとして最大限に活用するためのスキル、すなわちAIへの「話し方」である「プロンプト術」を徹底的に学びます。AIは単なるツールではなく、まるであなた専属の「VBA先生」や「優秀なアシスタント」のように、あなたの質問に答え、課題解決を手伝ってくれます。その力をどれだけ引き出せるかは、あなたの「プロンプト(質問文)」にかかっています。


この章を通して、AIに意図を正確に伝え、必要な情報やコードを引き出し、さらにはAIとの対話を通じて回答を改善させていくための具体的なテクニックを習得します。プロンプト術を身につけることで、あなたはAIと共に、VBAによる自動化の世界をスムーズに、そして効果的に進んでいくことができるようになるでしょう。


目次

AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する!
第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方
第6章:AIとVBAを学び続ける!あなたの「超効率化」を止めないヒント
・AIプロンプト最適化のヒント:さらに“伝わる”プロンプトの書き方 ・ステップアップ!AIと挑戦するより高度な応用自動化事例 ・VBAとGemini API連携:AIコーディングアシスタントの構築 ・まとめ:AIと共に進化する「書かない自動化」のその先へ

第7章:さらなる高みへ!AI×VBA応用テクニックの世界
おわりに:AI×VBAはあなたの未来を変える強力な武器 (付録付き)



AIを使いこなすカギ!良い「プロンプト」(質問文)の書き方

AIを、あなたのExcel VBA学習や作業自動化のための「自分だけの先生」や「優秀なアシスタント」として使いこなすには、ちょっとしたコツが必要です。そのコツこそが、AIへの「質問の仕方」であり、専門用語で言うところの「プロンプト」と呼ばれるものです。

「プロンプト」とは、私たちがAIに対して入力する質問文や指示文のことです。あなたが知りたいこと、AIにやってほしいことを、AIが理解できるように伝えるための「言葉」だと思ってください。そして、このプロンプトを通してAIとやり取りを重ねることで、まるで対話するように、あなたの疑問を解消したり、求める情報やコードを引き出したりすることが可能になります。

この項目では、AIから期待通りの、あるいはそれ以上の回答(VBAコード、エラー解説、手順など)を引き出すための、「良いプロンプト」の書き方の基本を学びます。

なぜ「良いプロンプト」が必要なの?

AIは確かに賢いアシスタントですが、残念ながら私たちの心を読んで完璧な答えを察してくれるわけではありません。AIは、私たちが入力したプロンプトの内容を元に、最も可能性の高い回答を生成します。

想像してみてください。あなたが誰かに何かをお願いするとき、曖昧な言い方をすると、相手は何を求めているのか分からず、見当違いの答えが返ってきたりしますよね。AIも同じです。
  • 悪いプロンプトの例: 「Excel VBA 教えて」
  • AIの回答(例): 「Excel VBAはMicrosoft Officeに搭載されているプログラミング言語です。どんなことを知りたいですか?」
これでは、あなたが本当に知りたい情報(例えば、A1セルに文字を入れる方法)にはたどり着けません。
一方、具体的で分かりやすい「良いプロンプト」を使えば、AIはあなたの意図を正確に理解し、ピンポイントな情報を提供してくれます。
  • 良いプロンプトの例: 「Excel VBAで、A1セルに『テスト』という文字を入力するコードを教えてください。」
  • AIの回答(例): 「はい、Excel VBAでA1セルに『テスト』と入力するコードは以下のようになります。 vba Range("A1").Value = "テスト" このコードをVBEの標準モジュールに貼り付けて実行すると、A1セルに『テスト』と入力されます。」
このように、プロンプトの質が、AIからの回答の質を大きく左右するのです。AIをあなたの頼れるVBA先生にするためには、「良いプロンプト」を書くスキルは避けて通れません。

AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

良いプロンプトを書くための基本的な考え方

良いプロンプトを書く上で大切なのは、「AIは私たちが伝えたいことの背景や文脈を知らない」という前提に立つことです。AIに「察してもらう」のではなく、私たちが「丁寧に伝える」意識を持ちましょう。

また、AIは大量のデータに基づいて回答を生成しますが、その情報が常に最新だったり、あなたのExcel環境に完全に合致しているとは限りません。そのため、回答を鵜呑みにせず、検証する姿勢も重要です(これについては後述します)。

良いプロンプトの具体的な要素

では、具体的に「良いプロンプト」にはどのような要素を含めれば良いのでしょうか。いくつか効果的なテクニックをご紹介します。
  1. 目的・要望を明確に具体的に伝える
    AIに「何をやってほしいのか」「何について知りたいのか」を、できるだけ具体的に明確に伝えましょう。抽象的な質問よりも、具体的な質問の方がAIは的確な答えを出しやすくなります。
    • 例: 「Excelのデータを集計したい」ではなく、「Excelの『売上データ』シートにあるB列の商品の売上合計を計算するVBAコードを教えてください。」のように、シート名、列、やりたいこと(合計計算)、求めるもの(VBAコード)を具体的に盛り込む。

  2. 必要な背景情報や制約条件を含める
    AIがより適切な回答を生成できるように、質問に関連する背景情報や、満たしてほしい条件(制約条件)を含めましょう。
    • 例: 「VBAコードを教えてください」だけでなく、「Excel 2019で動作するVBAコードで、特定のファイルを開く処理を教えてください。」のように、Excelのバージョンや、特定のファイルを開く、といった操作を含める。
    • 例: 「シートを操作するVBAコード」ではなく、「『集計』という名前のシートのみを操作対象とするVBAコードを教えてください。」のように、対象とするシート名を指定する。
    • 例: 「エラーが出た」だけでなく、「MsgBox '実行時エラー '1004': アプリケーション定義またはオブジェクト定義のエラーです。' というエラーメッセージが表示されました。このVBAコードの何が原因か教えてください。コードは以下の通りです。(コードを貼り付け)」のように、エラーメッセージの内容や関連するコードを含める。

  3. AIに「役割」を与える(ロールプレイング)
    AIに特定の役割を与えると、その役割に沿った回答を生成しやすくなります。VBAに関して質問する場合は、「あなたはExcel VBAのベテラン講師です」「あなたはプログラミング初心者に教えるのが得意なAIです」のように指示してみましょう。
    • 例: 「あなたはExcel VBAの初心者向け講師です。私が書いたコードを、一つ一つの命令について、初心者にも分かるように解説してください。」のように役割を指定することで、専門用語を避け、分かりやすい説明を引き出しやすくなる。

  4. 回答の形式やレベルを指定する
    AIにどのような形式で回答してほしいか、どのくらいのレベルで説明してほしいかを指定することも有効です。
    • 例: 「VBAコードだけを提示してください。」
    • 例: 「手順を箇条書きでまとめてください。」
    • 例: 「小学生にも分かるように説明してください。」
    • 例: 「コードとそのコードが何をしているかの簡単な解説を含めてください。」

  5. 具体的な例を示す
    質問内容に関連する具体的なデータや、自分で書いたコードの一部などをプロンプトに含めることで、AIはより状況を把握しやすくなります。
    • 例: 「以下のExcelデータ(ここにデータをコピー&ペースト)のB列の合計を求めるVBAコードを教えてください。」
    • 例: 「私が書いた以下のコード(ここにコードをコピー&ペースト)が動きません。どこを修正すれば良いですか?」

  6. 実践的なプロンプトの例(段階的に良くする)
    これまでに、良いプロンプトに含めるべき要素をいくつかご紹介しました。ここでは、具体的なExcel作業のシナリオを元に、段階的にプロンプトを改善していく例を見ていきましょう。

良いプロンプトの具体例

シナリオ: 「売上データ」シートからB列が「A商品」の行だけを抽出し、「A商品リスト」シートにコピーしたい。

まず、シンプルに質問してみます。
最初のプロンプト(情報不足):
Excel VBAで、売上データからA商品だけを抽出して、別のシートにコピーするコードを教えて。
この質問でもAIは回答を生成してくれますが、どのシートから? コピー先は? データ範囲は? といった情報が不足しているため、一般的なコードになったり、追加の質問をされたりする可能性が高いです。

次に、対象シートや条件などを明確にしてみましょう。
情報を加えたプロンプト(少し具体的):

Excel VBAで、「売上データ」シートにあるデータの中から、B列(商品名)が「A商品」となっている行だけを抽出したいです。
抽出した行を、「A商品リスト」という別のシートにコピーして貼り付けるコードを教えてください。
このプロンプトであれば、対象シートや抽出条件、コピー先が明確になりました。AIはより目的に沿ったコードを生成してくれるはずです。しかし、回答の形式や、AIにどのような立場(役割)で答えてほしいかといった点は指定されていません。

さらに、AIにあなたの状況をより正確に伝え、求める回答形式を明確にする要素を加えてみましょう。これが、本書でおすすめする、情報が充実したプロンプトの形です。
さらに情報を加えたプロンプト(本書でおすすめする形):

あなたはExcel VBAの専門家で、VBA初心者に分かりやすくコードを教えてくれるアシスタントです。

【依頼内容】
「売上データ」というExcelシートのA列からF列にあるデータの中から、B列(商品名)が「A商品」となっている行だけを抽出したいです。

抽出した行は、新しく作成した「A商品リスト」というシートの1行目から順にコピーして貼り付けたいです。

この一連の作業を自動化するVBAコードを教えてください。

【条件・補足】
・ExcelのバージョンはMicrosoft 365です。
・コードと合わせて、それぞれのコードが何をしているかの簡単な解説もお願いします。
・コードはVBEの標準モジュールに貼り付けて使用することを想定しています。
このプロンプトには、AIへの「役割」、具体的な「依頼内容」(目的、対象シート、抽出条件、コピー先)、そして「条件・補足」(Excelバージョン、回答形式、使用環境)といった、これまでに学んだ良いプロンプトの要素が網羅されています。

このように、一度で完璧なプロンプトを書こうと思わなくても大丈夫です。最初はシンプルに始めてみて、AIの回答を見ながら「もう少し詳しく伝えよう」「この情報も必要かな?」と考えて、質問を修正したり、次に投げかける質問を工夫したりする。この「AIとのやり取りを重ねて、求める答えにたどり着くプロセス」こそが、プロンプト術の本質であり、本書で最も大切にしたい学習スタイルです。

まとめ:AIとの「対話」でVBAスキルを磨く

良いプロンプトを書くことは、AIとのコミュニケーションの質を高めることです。単に一度の質問で完璧な答えを得ようとするのではなく、AIとのやり取りを重ね、必要に応じて質問を修正・追加していく。この対話のプロセスを通して、AIはあなたの強力なアシスタントとして、より的確に、より分かりやすくサポートしてくれるようになります。

最初は難しく感じるかもしれませんが、本書でご紹介した要素を意識して質問を組み立て、AIとの対話を重ねることで、VBAの知識やコードを効率的に習得することができるでしょう。プロンプト術は、まさにAIと共に学ぶための重要なスキルなのです。

より進んだプロンプト作成のテクニックについては、この章の最後の項目「より高度なプロンプト作成の実践ガイド」でご紹介します。


「このコードは何?」AIにVBAを解説してもらう方法

第3章の最初の項目では、AIにやってほしいことを正確に伝える「良いプロンプト」の書き方の基本を学びました。
AIへの質問は、コードを「書いてもらう」ことだけではありません。

インターネットでVBAのサンプルコードを見つけたり、以前作った(あるいは誰かが作った)マクロを開いてみたりしたときに、「このコード、何をしているんだろう?」「この命令の意味が分からないな…」と首を傾げた経験はありませんか?

VBAコードは、書くことと同じくらい、あるいはそれ以上に「読む」ことが難しいと感じるかもしれません。特に、見慣れない命令や、複雑な記述が出てくると、どこから手をつけて良いか分からなくなってしまいます。

そんな時こそ、AIの出番です! AIは、与えられたVBAコードを分析し、その意味や動作を分かりやすく解説してくれます。
AIをあなたの「コード読解アシスタント」として活用しましょう。

この項目では、AIに既存のVBAコードの意味を解説してもらうための、効果的なプロンプトの書き方について学びます。ただし、ここで目指すのは、必ずしもVBAコードを完璧に読めるようになることではありません。AIが生成してくれたVBAコードを実際にExcelで実行してみて、あなたの希望通りの結果が得られるのであれば、コードが「どのような処理をしているのか」という概要程度の理解でも、まずは十分にAIを活用できていると言えます。


なぜAIにコード解説を頼むと便利なの?

  • 自分で調べるより速い: 分からない命令が出てくるたびに、ネット検索したり参考書を引いたりするのは時間がかかります。AIなら、コード全体や特定の部分を一度に解説してもらえます。
  • 初心者にも分かりやすい言葉で: AIに「初心者向けに解説して」とお願いすれば、専門用語を避け、あなたが理解できる言葉で説明してくれます。
  • コード全体の流れも理解できる: 一つ一つの命令だけでなく、コード全体がどのような処理の流れになっているのかを、AIにまとめて解説してもらうことも可能です。

コード解説を依頼する基本的なプロンプト

AIにVBAコードの解説を依頼するのはとても簡単です。基本的なプロンプトの形は以下のようになります。

基本的なプロンプトの例:
以下のVBAコードを解説してください。

(ここに解説してほしいVBAコードを貼り付け)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

このように、「解説してください」という指示と、その下に解説してほしいVBAコードを貼り付けるだけで、AIはコードの分析を開始し、解説を生成してくれます。コードは、VBEからそのままコピー&ペーストして構いません。

解説のレベルや形式を指定するプロンプト

AIはあなたのプロンプトに応じて、様々なレベルや形式で解説を生成できます。「良いプロンプト」の書き方で学んだテクニック(役割指定、回答形式指定)を応用して、よりあなたにとって分かりやすい解説を引き出しましょう。

解説のレベルや形式を指定するプロンプトの例:
  • 初心者向けに:
    以下のVBAコードについて、Excel VBA初心者の私にも分かるように、専門用語を避けながら解説してください。
    
    (ここにVBAコードを貼り付け)
  • 箇条書きでステップごとに:
    以下のVBAコードが実行される際の処理の流れを、ステップごとに箇条書きで分かりやすく解説してください。
    
    (ここにVBAコードを貼り付け)
  • 特定の機能に焦点を当てて:
    以下のVBAコードの中で、データをコピー&ペーストしている部分が何を意味しているか、具体的に解説してください。
    
    (ここにVBAコードを貼り付け)
  • コードと解説をセットで:
    以下のVBAコードについて、各行(または主要な部分)ごとに、そのコードが何をしているかの解説を加えてください。
    
    (ここにVBAコードを貼り付け)

このように、どのような立場で(初心者向け、ステップごと)、どのような形式で(箇条書き、コードとセット)、何に焦点を当てて解説してほしいのかを具体的に伝えることで、AIはあなたのニーズに合った解説を生成してくれます。

特定の箇所だけ質問する

コード全体ではなく、「この部分だけ意味が分からないな…」という特定の命令や記述について質問することもできます。

特定の箇所だけ質問するプロンプトの例:
Excel VBAについて質問です。以下のコードの一部にある `Range("A1").Value` という記述は、具体的に何を意味していますか? 分かりやすく教えてください。
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

このように、疑問に思っているコードの部分を明確に示して質問することで、AIはその部分に絞った解説をしてくれます。もし可能であれば、そのコードが含まれている全体の一部(関連する数行)も一緒に見せると、AIは文脈を理解しやすくなります。

AIの解説をどう活かすか

AIにVBAコードを解説してもらったら、まずその解説を読んで、コードがあなたのプロンプトの指示どおりの内容になっているかを確認しましょう。解説を参考にすることで、コードの一つ一つの命令が何をしているのか、全体の流れはどうなっているのかが理解しやすくなるはずです。

コードの内容がある程度理解でき、意図どおりになっているように思えたら、次にVBEで実際にコードを実行してみましょう(VBEの画面上部にある緑色の実行ボタンをクリックするか、キーボードの[F5]キーを押します)。

【重要】コードを実行する際の注意

VBAコードは、Excelのデータや設定を自動で変更できる便利なものですが、その反面、コードの内容によっては予期せぬ動作をしたり、重要なデータを書き換えてしまったりする可能性もゼロではありません。特に慣れないうちは、コードがあなたの意図した通りにだけ動くとは限りません。
そのため、重要なデータが入ったファイルで新しいコードを試す前には、必ず以下のいずれかを行ってください。
  • ファイルのバックアップをしっかり取る: 元のファイルがいつでも戻せるように、コピーを作成しておきましょう。
  • テスト用のファイルで試す: 新しいExcelファイルを作成し、必要なデータの一部だけをコピーして貼り付け、そのファイルでコードを試すようにしましょう。
    慣れるまでは、この注意を必ず守ってください。

そして、Excelのシートに戻って、コードの実行結果があなたの希望通りの動作になっているかを確認します。データが正しく処理されたか、エラーは発生しないかなどをチェックしてください。

もし、解説を読んでもコードの内容がよく分からなかったり、実行結果が希望通りでなかったりした場合は、その解説や実行結果、希望する動作などをAIに伝えて、追加で質問したり、コードの修正を依頼したりしましょう。このAIとのやり取りを重ねることで、コードはあなたの目的に合った、より洗練されたものになっていきます。

最初は「ふむふむ、なるほど」と解説を読むだけでも構いません。
慣れてきたら、解説を元に「この部分がどう影響するのかな?」と考えて、実際にコードを動かして結果を見てみる、そして希望通りか確認する、という練習を繰り返すのがおすすめです。この積み重ねが、あなたのVBAスキルを着実に向上させてくれます。

AIはあなたの「コード読解アシスタント」であると同時に、「VBAの仕組みを教えてくれる先生」でもあります。積極的に質問して、コードへの理解を深めていきましょう。


複雑な処理も怖くない!「段階的に教えて」テクニック

これまでの項目で、AIに要望を伝える基本的なプロンプト、そしてAIにコードを解説してもらう方法を学びました。

簡単な要望であれば、一度のプロンプトでAIからぴったりの回答を得られることも多いでしょう。しかし、あなたが自動化したい作業が少し複雑だったり、「こうしたいんだけど、どう表現すれば良いか分からない…」といったように、要望が頭の中で整理できていなかったりする場合もありますよね。

そんな時、「一度に全てをAIに伝えよう!」と頑張って、すごく長くて複雑なプロンプトを作成しようとすると、かえって情報が整理されず、AIもあなたの意図を正確に把握しにくくなることがあります。その結果、期待通りの回答が得られず、「やっぱりAIじゃダメだ…」と感じてしまうかもしれません。

問題を分解!段階的にAIと「対話」するメリット

複雑な要望や、まだ頭の中で整理できていないアイデアをAIに伝える際に有効なのが、問題を小さなステップに分解し、AIに段階的に質問したり、指示したりするというテクニックです。
例えるなら、料理のレシピを一度に全て伝えるのではなく、「まず野菜を切って」「次に肉を炒めて」というように、手順を追って説明していくようなものです。

この「段階的に教えて」テクニックには、いくつかのメリットがあります。
  • プロンプトがシンプルになる: 一度に大量の情報を詰め込む必要がないため、一つ一つのプロンプトが分かりやすくなります。
  • AIの回答精度が高まる: AIは直前のやり取りの文脈を理解して回答を生成するため、段階的に情報を与えることで、より的確な回答を引き出しやすくなります。
  • 思考が整理される: 問題を小さなステップに分解する過程で、あなたが本当にやりたいことが明確になり、頭の中が整理されます。
  • 学習効果が高い: AIとの対話を通じてステップごとに確認を進めるため、コードや処理の流れへの理解が深まり、学習の定着に繋がります。
  • 仕様変更に対応しやすい: 途中でやりたいことが少し変わったり、新しいアイデアが浮かんだりしても、柔軟に対応しながらAIと共同でコードを作り上げていくことができます。

これはまさに、AIをあなたの「優秀なアシスタント」として、一緒に考え、一緒に作り上げていく「対話」のスタイルです。

AIに状況を正確に伝える:画面スクショの活用

AIに複雑なExcel作業やVBAコードについて質問する際、テキストだけで状況を正確に伝えるのが難しい場合があります。特に、データの正確な範囲、シートのレイアウト、エラー画面の詳細などは、言葉で説明するだけでは曖昧になりがちです。

そんな時、ExcelやVBEの画面スクリーンショット(スクショ)をプロンプトに添付することが、AIの理解を劇的に深め、より的確な回答を引き出す強力な助けとなります。多くの最新AIは画像を認識し、そこに含まれる情報(テキスト、数値、図形、レイアウトなど)を読み取ることができます。

画面スクショをAIに見せることで、以下のような良い効果が期待できます。
  • 状況の正確な把握: AIはあなたの実際の作業環境(データの形、シートの名前、セルの書式など)を視覚的に理解できます。例えば、「この表の合計を出したい」と言うだけでなく、実際の表の範囲を見せることで、AIは対象データを迷わず特定できます。
  • 曖昧さの解消: テキストの説明だけでは複数の解釈ができる場合でも、画像を見ることでAIはあなたの意図を正確に推測しやすくなります。「〇〇のデータを△△に貼り付けたい」という指示も、実際のシートレイアウトを見せることで誤解を防げます。
  • 複雑なレイアウトの伝達: セルの結合、特定の図やグラフの配置、複雑な入力規則など、テキストで説明が困難な視覚的な情報を簡単に伝えられます。
  • エラー原因の特定支援: エラーメッセージが表示されている画面や、VBEでコードが特定の行で止まっている画面のスクショは、AIが問題の原因を素早く特定し、修正方法を提案するための重要な手掛かりとなります。意図しない実行結果になった画面を見せるのも有効です。

どのような画面を見せると良いか? 例えば、以下のような場面で活用を検討してみてください。
  • 自動化したいデータの入ったシート全体の画面: データの範囲、ヘッダー行、列の内容などが分かります。
  • 特定の操作を行いたい部分の画面: 例えば、抽出したい範囲、集計したい範囲などが含まれる画面。
  • エラーが発生したVBEの画面: エラーメッセージの内容や、黄色く強調表示されたコードの行などが分かります。
  • 意図しない実行結果になったExcelシートの画面: どこが期待と違うのかをAIが把握しやすくなります。

【注意点】
ただし、全てのAIモデルが画像を認識できるわけではありません。お使いのAIサービスが画像入力をサポートしているか確認してください。また、スクショには機密情報や個人情報が含まれる可能性があります。AIサービスにアップロードする前に、不要な情報は写っていないか、あるいはマスキングするなど、情報管理には十分注意しましょう。
この画面スクショの活用は、次に示すようなAIとの対話の各ステップにおいても、AIの理解を深める上で非常に有効な手段となります。

具体的なシナリオで「段階的に教えて」を実践

では、具体的なExcel作業のシナリオを例に、この「段階的に教えて」テクニックを使ってみましょう。

シナリオ:
  • 「元データ」シートに、日付、商品名、売上金額のデータがある。
  • このデータから、特定の期間(例:先月1ヶ月分)のデータだけを抽出したい。
  • 抽出したデータを商品名ごとに集計し、集計結果を新しいシートにまとめたい。
  • さらに、集計結果を元に、商品名ごとの売上推移グラフを作成したい。

この一連の作業をVBAで自動化したいと考えました。一度に全てをAIに依頼しようとすると、かなり複雑なプロンプトになりそうですね。そこで、作業を小さなステップに分解してみましょう。

作業のステップ分解例:
  1. 特定の期間のデータを抽出する
  2. 抽出したデータを商品名ごとに集計する
  3. 集計結果を元にグラフを作成する

AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

このステップ分解を元に、AIと対話しながらVBAコードを作成していきます。前述の通り、この対話の各ステップにおいて、関連するExcel画面のスクリーンショットをAIに見せることは、AIの理解を助け、より的確なコードを引き出す上で非常に有効です。

AIとの対話例:
あなた(ユーザー):
あなたはExcel VBAの初心者向け講師です。
「元データ」シートから、特定期間のデータを抽出するVBAコードを段階的に教えてもらいたいです。

まず、最初のステップとして、「元データ」シートのデータから、日付が先月1ヶ月分である行を抽出するVBAコードを教えてください。コードと簡単な解説をお願いします。
ポイント:最初のプロンプトで、これから段階的に質問すること、そして最初のステップの内容を明確に伝えています。役割指定もしています。

AI:
はい、承知いたしました。「元データ」シートから先月1ヶ月分のデータを抽出するVBAコード例は以下のようになります。

VBA
Sub ExtractDataByDate()
  Dim wsSource As Worksheet
  Dim wsTarget As Worksheet
  Dim lastRow As Long
  Dim i As Long
  Dim startDate As Date
  Dim endDate As Date

  ' 抽出期間を設定(例:先月1ヶ月)
  ' 今日の日付を基準に、先月1日の日付を取得
  startDate = DateSerial(Year(Date), Month(Date) - 1, 1)
  ' 今日の日付を基準に、今月1日の日付を取得(先月末日までを抽出するため)
  endDate = DateSerial(Year(Date), Month(Date), 1) - 1

  Set wsSource = ThisWorkbook.Sheets("元データ")

  ' 抽出結果を貼り付けるシート(「抽出結果」という名前を想定)
  ' もしシートが存在すればクリア、存在しなければ作成
  On Error Resume Next
  Set wsTarget = ThisWorkbook.Sheets("抽出結果")
  If wsTarget Is Nothing Then
    Set wsTarget = ThisWorkbook.Sheets.Add(After:=wsSource)
    wsTarget.Name = "抽出結果"
  Else
    wsTarget.Cells.ClearContents ' 既存のデータをクリア
  End If
  On Error GoTo 0

  ' ヘッダー行をコピー(1行目を想定)
  wsSource.Rows(1).Copy wsTarget.Rows(1)

  lastRow = wsSource.Cells(Rows.Count, "A").End(xlUp).Row ' 元データの最終行を取得

  ' データ行をループして条件に合う行の売上金額を合計
  For i = 2 To lastRow
    ' A列の日付が抽出期間内にあるか判定
    If wsSource.Cells(i, "A").Value >= startDate And _
      wsSource.Cells(i, "A").Value <= endDate Then
      ' 条件を満たす行を「抽出結果」シートの最終行の下にコピー
      wsSource.Rows(i).Copy wsTarget.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    End If
  Next i

  MsgBox "データの抽出が完了しました。「抽出結果」シートを確認してください。"

End Sub

解説:
このコードは、「元データ」シートのA列の日付を見て、設定した期間(startDate から endDate まで)のデータを抽出し、「抽出結果」という名前のシートにコピー&ペーストするものです。
DateSerial や DateAdd 関数で日付を計算し、If 文で日付が期間内にあるか判定しています。
条件に合う行が見つかると、その行をコピーして抽出結果シートの最後に貼り付けています。

ポイント:AIが最初のステップのコードと解説を生成してくれます。
※上記はVBAコードも解説もあくまでサンプルです。実際にはもっと詳しい解説文になります。

あなた(ユーザー):
ありがとうございます。頂いたコードで、先月分のデータが抽出できました。

次に、抽出したデータを商品名ごとに集計するVBAコードを教えてください。抽出されたデータは新しいシートに貼り付けられているとします。集計は、商品名(B列)を基準に、売上金額(C列)の合計を求めたいです。集計結果は、商品名と合計売上金額のリストとして提示してください。
ポイント:前のステップが完了したことを伝え、次のステップ(集計)の内容と、具体的な集計方法(商品名で集計、売上金額を合計)と出力形式(リスト)を具体的に依頼しています。

AI:
はい、承知いたしました。抽出結果シートのデータを商品名ごとに集計するVBAコード例は以下のようになります。ピボットテーブルを使用して集計する方法が効率的でおすすめです。

VBA
Sub SummarizeSalesByProduct()
  Dim wsSource As Worksheet
  Dim wsTarget As Worksheet
  Dim dataRange As Range
  Dim pivotCache As PivotCache
  Dim pivotTable As PivotTable

  ' 集計元のシート(抽出結果シートを想定)
  Set wsSource = ThisWorkbook.Sheets("抽出結果")

  ' 集計結果を貼り付けるシート(「集計シート」という名前を想定)
  ' もしシートが存在すればクリア、存在しなければ作成
  On Error Resume Next
  Set wsTarget = ThisWorkbook.Sheets("集計シート")
  If wsTarget Is Nothing Then
    Set wsTarget = ThisWorkbook.Sheets.Add(After:=wsSource)
    wsTarget.Name = "集計シート"
  Else
    wsTarget.Cells.ClearContents ' 既存のデータをクリア
  End If
  On Error GoTo 0

  ' 集計対象のデータ範囲(抽出結果シートのデータ全体を想定)
  ' 例:A1セルからデータが入っている最終セルまで
  Set dataRange = wsSource.Range("A1").CurrentRegion ' CurrentRegionで連続したデータ範囲を取得

  ' ピボットテーブルの作成
  Set pivotCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=dataRange)
  Set pivotTable = pivotCache.CreatePivotTable(TableDestination:=wsTarget.Range("A1"), TableName:="SalesSummary")

  ' ピボットテーブルのフィールド設定
  With pivotTable
    .PivotFields("商品名").Orientation = xlRowField ' 商品名を「行」フィールドに設定
    .AddDataField .PivotFields("売上金額"), "合計 / 売上金額", xlSum ' 売上金額を「値」フィールドに合計として設定
  End With

  ' ピボットテーブルの表示設定(必要に応じて)
  pivotTable.PivotFields("商品名").Caption = "商品名" ' フィールド名を「商品名」に変更
  ' ピボットテーブルのレイアウトをテーブル形式にする例
  ' pivotTable.RowAxisLayout xlTabularRow

  MsgBox "集計が完了しました。「集計シート」を確認してください。"

End Sub

解説:
このコードは、「抽出結果」シートのデータを使って、商品名ごとの売上金額合計をピボットテーブルで集計し、「集計シート」に結果を表示するものです。
ピボットテーブルを使うと、VBAでこのような集計処理を効率的に記述できます。
CreatePivotTable でピボットテーブルを作成し、PivotFields や AddDataField で集計の設定を行っています。
必要に応じて、グラフのタイトルや凡例なども設定できます。

ポイント:AIが次のステップのコードと解説を生成してくれます。ピボットテーブルを使う例と、その解説を記載します。
※上記はVBAコードも解説もあくまでサンプルです。実際にはもっと詳しい解説文になります。

あなた(ユーザー):
集計もできました! ありがとうございます。

最後に、集計結果のデータを使って、商品名ごとの売上推移グラフ(棒グラフ)を作成するVBAコードを教えてください。集計結果は「集計シート」のA列に商品名、B列に売上合計が入っているとします。グラフは新しいシートに作成してください。
ポイント:前のステップが完了したことを伝え、最後のステップ(グラフ作成)の内容と、グラフ作成に必要なデータの場所、グラフの種類、作成場所を具体的に依頼しています。

AI:
はい、承知いたしました。集計結果のデータからグラフを作成するVBAコード例は以下のようになります。

VBA
Sub CreateSalesChart()
  Dim wsSource As Worksheet
  Dim chartSheet As Chart
  Dim dataRange As Range

  ' グラフの元データとなるシート(集計シートを想定)
  Set wsSource = ThisWorkbook.Sheets("集計シート")

  ' 集計結果のデータ範囲を取得
  ' 例:A1セルからデータが入っている最終セルまで
  Set dataRange = wsSource.Range("A1").CurrentRegion ' CurrentRegionで連続したデータ範囲を取得

  ' 新しいグラフシートを追加し、変数にセット
  Set chartSheet = ThisWorkbook.Charts.Add

  ' グラフシートの名前を設定
  chartSheet.Name = "商品別売上グラフ"

  ' グラフの元データ範囲を設定
  chartSheet.SetSourceData Source:=dataRange

  ' グラフの種類を明示的に棒グラフ(ここでは集合縦棒)に設定
  chartSheet.ChartType = xlColumnClustered

  ' グラフタイトルを設定
  chartSheet.HasTitle = True ' タイトルを表示する設定
  chartSheet.ChartTitle.Text = "商品別 売上合計グラフ" ' タイトル文字列を設定

  ' 凡例を非表示にする(項目数が少ない場合や不要な場合)
  chartSheet.HasLegend = False ' 凡例を非表示にする設定

  ' データラベルを追加する例(任意)
  ' chartSheet.SeriesCollection(1).HasDataLabels = True
  ' chartSheet.SeriesCollection(1).DataLabels.ShowValue = True ' 値を表示

  MsgBox "グラフの作成が完了しました。「商品別売上グラフ」シートを確認してください。"

End Sub

解説:
このコードは、「集計シート」のデータ範囲(A1セルを含む連続したデータ範囲)を元に、「商品別売上グラフ」という名前の新しいシートに集合縦棒グラフを作成するものです。CurrentRegionでデータ範囲を取得し、SetSourceData でグラフの元データを指定しています。ChartType でグラフの種類を明示的に設定し、HasTitle や ChartTitle.Text でグラフタイトルを設定しています。必要に応じて、グラフのタイトルや凡例なども設定できます。

ポイント:AIが最後のステップのコードと解説を生成してくれます。グラフ作成のコードと、その解説を記載します。
※上記はVBAコードも解説もあくまでサンプルです。実際にはもっと詳しい解説文になります。

AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

このように、問題を小さなステップに分けてAIに依頼することで、一度に複雑なプロンプトを書くよりも、スムーズに、そして確実に目的のVBAコードにたどり着くことができます。

段階的プロンプトは学習にも効果的
この「段階的に教えて」テクニックは、VBAコードの生成だけでなく、VBAの仕組みを学ぶ上でも非常に有効です。

例えば、「このコード、何をしているんだろう?」と疑問に思ったときに、コード全体を一度に解説してもらうのではなく、「まず、この部分は何をしていますか?」「その次に、この部分は?」というように、コードの特定の箇所について段階的に質問していくことで、コードの動作原理をより深く、順番に理解していくことができます。

複雑なVBAコードや、やりたい作業が頭の中で整理できていない場合は、ぜひこの「段階的に教えて」テクニックを試してみてください。AIが、あなたの理解度やペースに合わせて、最適なサポートをしてくれるはずです。


【ちょっとコラム:AIに「ありがとう」は必要?】
AIとの対話例を見て、「AIに『ありがとうございます。』とか『〇〇ができました。』みたいな、丁寧な言葉や状況報告って必要なのかな?」「書いたほうが回答が良くなるの?」と疑問に思われた方もいるかもしれませんね。

結論から言うと、現在の多くの生成AIモデルにおいて、「ありがとうございます」といった感謝の言葉そのものが、その後の回答の質や内容を劇的に向上させる主要な要因になることは、技術的にはほとんどありません。AIは、あなたが感謝しているという感情を理解して、それに応じて回答を調整しているわけではないからです。AIの回答の質は、あなたがプロンプトにどれだけ具体的で分かりやすい情報を含めているか、によって決まります。

ただし、「ありがとうございます。次に〇〇を教えてください。」のように、感謝の言葉の後に続く言葉(「次に」「そこで」など)が、AIが会話の流れを把握し、次の指示や質問を認識する手助けになる可能性はあります。また、AIとのやり取りを人間に対するのと同じように丁寧に行うことで、あなた自身が気持ちよくAIを活用できる、という心理的な側面もあるでしょう。

ですので、AIに「ありがとう」と言うことは、必須ではありません。書いても書かなくても、AIがあなたの質問を理解して回答を生成する能力自体に大きな差は出ないと考えて良いでしょう。あなたが自然にそうしたいと感じるなら書いても良いですし、特に必要ないと感じるなら書かなくても問題ありません。ご自身のやりやすいスタイルでAIと対話してみてください。


AIの回答を改善させる「プロンプト強化法」

これまでの項目で、AIにVBAコードを作成してもらったり、解説してもらったりするためのプロンプトの書き方や、複雑な要望を段階的に伝えるテクニックを学びました。

しかし、AIは万能ではありません。時には、あなたが書いたプロンプトに対して、AIが期待通りの回答を生成してくれないこともあります。
  • 意図したVBAコードと違うものが提示された。
  • 生成されたコードを実行したらエラーになった。
  • 解説が難しすぎた、あるいは求めている情報が含まれていなかった。
  • 全く見当違いな回答が返ってきた。

このようなことが起こる原因はいくつか考えられます。あなたのプロンプトに情報が不足していたり曖昧だったりした場合、AIが文脈を正確に理解できなかった場合、AIの学習データにない情報だった場合、あるいはAIの「ハルシネーション」が発生した場合です。
「ハルシネーション」とは、AIが事実に基づかない、しかし文脈上は非常にもっともらしく聞こえる情報を生成してしまう現象のことです。これは、AIが学習データ内のパターンに基づいて次にくる可能性が高い単語を予測して文章を生成するため、時に事実と異なる内容を作り出してしまうために起こります。

期待通りの回答が得られなくても大丈夫!プロンプトは「強化」できる

もし、AIからの回答があなたの期待通りでなかったとしても、決して「AIは使えないんだ…」と諦める必要はありません! ここからが、AIを本当に使いこなすための腕の見せ所です。

AIとのやり取りは、一度質問して終わりではありません。得られた回答を評価し、必要に応じてプロンプトを修正したり、追加の情報を与えたり、別の質問を投げかけたりすることで、AIの回答をあなたの求めるものに近づけていくことができます。これが、「プロンプト強化」と呼ばれるテクニックです。

例えるなら、部下や同僚に仕事をお願いしたときに、一度の説明で完璧な結果が得られなくても、フィードバックを与えたり、補足情報を伝えたりすることで、より良い成果を目指すのと同じです。AIも、適切なフィードバックや追加情報によって、その能力を最大限に発揮できるようになります。

回答を改善させるための具体的な「プロンプト強化法」

では、具体的にどのようにプロンプトを「強化」すれば、AIの回答を改善させることができるのでしょうか。いくつかの効果的な方法をご紹介します。

1. 回答の「どこが」「どのように」不適切か具体的に伝える
AIの回答が期待通りでなかった場合、単に「この回答は間違っている」と伝えるだけでは、AIは何を改善すれば良いか分かりません。回答のどの部分が、どのように不適切なのかを具体的に指摘することが重要です。

特にエラーが発生した場合、エラーメッセージをAIに伝えることは、原因特定のために非常に重要です。メッセージの内容を正確にコピー&ペーストして伝えるのはもちろん有効ですが、エラーポップアップが表示された画面や、VBEでエラー箇所が黄色く強調表示されている画面のスクリーンショットを撮ってAIに貼り付けることも、AIが状況を正確に把握する上で大変役立ちます。
前述の「AIに状況を正確に伝える:画面スクショの活用」で解説したように、画像は多くの情報を正確に伝える力を持っています。
  • 例: 『先ほど提示してくれたコードを実行したらエラーになりました。エラーメッセージは以下の通りです。』に続けて、エラーメッセージのテキストをコピー&ペーストするか、エラーポップアップの画面スクショを貼り付ける。

    AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

  • 例: 『VBEでコードを実行したところ、以下の画像の箇所でエラーが出て止まってしまいました。原因は何でしょうか?』に続けて、エラー箇所が黄色く強調表示されたVBE画面のスクショを貼り付ける。

    AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

    「デバッグ」をクリックすると当該行が黄色反転で表示されます。

    AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

このように、具体的なエラーメッセージ(または画面スクショ)を示したり、コードの特定の箇所や解説内容のどこが問題なのかを明確に伝えたりすることで、AIは修正すべきポイントを特定しやすくなります。

2. 追加の情報や制約条件を与える
最初のプロンプトに含めきれなかった情報や、AIの回答を見て初めて必要だと気づいた情報、あるいは満たしてほしい新しい条件などを追加で伝えましょう。
  • 例: 「先ほどのコードですが、対象とするデータの最終行は常に変化します。最終行を自動的に取得するように修正できますか?」
  • 例: 「シートの名前は常に『Sheet1』ではなく、ユーザーが自由に変更する可能性があります。シート名を指定するのではなく、現在アクティブなシートを対象にするようにコードを変更してください。」
  • 例: 「生成された解説は理解できましたが、この処理にかかる時間についても教えてください。」

このように、AIがコードを生成・解説する上で必要となる、あるいは回答の精度を高めるために役立つ情報を後から補足することで、AIはより状況に合った回答を生成できます。

3. 別の角度からの回答を求める
一つの回答がどうしてもうまくいかない場合や、もっと良い方法があるのではないかと思った場合は、別の切り口からの回答を求めてみましょう。
  • 例: 「先ほどは〇〇する方法を教えていただきましたが、△△を使った別の方法はありますか?」
  • 例: 「提示されたコードは動作しましたが、もっと処理速度を速くするための方法はありますか?別のコードを教えてください。」
  • 例: 「このVBAコードを使わずに、Excelの標準機能だけで同じことはできますか?」

このように、代替案や、より効率的な方法、あるいは異なるアプローチについて質問することで、AIは保有する多様な知識から、別の角度からの回答を提示してくれます。

4. 回答形式やレベルを再度指定する
AIの回答の形式やレベルが、あなたの理解度や目的に合わなかった場合は、改めて希望する形式やレベルを指定し直しましょう。
  • 例: 「先ほどの解説は少し専門的すぎました。もっと基本的な言葉で、一つ一つ丁寧に説明していただけますか?」
  • 例: 「提示されたコードは長すぎます。もっとシンプルで短いコードにできますか?」
  • 例: 「解説だけでなく、そのコードをVBEのどこに貼り付けて、どう実行すれば良いか、具体的な手順も箇条書きで教えてください。」

AIは柔軟に回答形式を変更できるため、遠慮せずにあなたの求める形式を伝えましょう。

5. AIに「質問」させる
もし、何が問題なのか、どう伝えれば良いのか、あるいはAIに何を伝えれば回答が改善されるのか、あなた自身が分からなくなってしまった場合は、AIに「私に質問して」と依頼してみましょう。AIは、あなたの状況やこれまでのやり取りを元に、回答の精度を高めるため、あるいはエラーの原因を特定するために不足している情報について、あなたに具体的な質問を投げかけてくれます。

例えば、以下のような質問をAIがしてくる可能性があります。
  • 『このコードを実行したいExcelファイルの具体的なデータ範囲(例: A1:C10)はどこですか?』
  • 『処理対象のシートの名前は正確には何ですか?(例: Sheet1, 売上データ)』
  • 『エラーが発生するのは、特定の操作を行った後ですか? その操作内容を教えてください。』
  • 『「データを抽出したい」とのことですが、どのような条件でデータを絞り込みたいですか?(例: B列が「A商品」の場合、C列が1000より大きい場合など)』
  • 『エラーメッセージの正確な全文を教えていただけますか?』
  • 『エラーが発生したVBEの画面(エラー箇所が黄色くなった状態)を見せていただけますか?』

このように、AIに質問させることで、あなたはAIがどのような情報を必要としているのかを知ることができ、次にどのようなプロンプトを書けば良いかのヒントを得られます。これは、AIとの共同作業において非常に強力なテクニックです。

まとめ:プロンプト強化はAI活用の必須スキル

AIの回答が常に完璧であるとは限りません。しかし、それはAIが「使えない」ということではなく、あなたがAIをより効果的に「誘導」する必要があるということです。
今回ご紹介したようなプロンプト強化のテクニックを使うことで、AIとのやり取りを通じて、あなたの求めるVBAコードや解説に確実にたどり着くことができます。これは、単にコードを手に入れるだけでなく、AIとの対話のプロセスを通してVBAへの理解を深めることにも繋がります。

プロンプト強化は、AIをあなたの「優秀なアシスタント」として最大限に活用するための必須スキルと言えるでしょう。


「わかったつもり」と「たぶんあってる」の違い

これまでの項目で、AIにVBAコードを書いてもらったり、解説してもらったりするためのプロンプト術を学び、AIをあなたの強力なアシスタントとして活用できるイメージが掴めてきたかと思います。AIはあなたの代わりにVBAコードを生成してくれる、非常に便利なツールです。

AIが生成したコードやその解説を目にしたとき、そして実際に実行したとき、あなたの理解や確認の度合いについて、二つの少し似ているけれども本質的に異なる状態があるかもしれません。それは、**「わかったつもり」と「たぶんあってる」**です。

この項目では、これら二つの状態がそれぞれ何を意味するのか、そしてAIを活用した「書かない自動化」において、どちらが許容され、どちらが危険なのかを明確に区別し、最も大切な「実行結果の検証」の重要性について改めて考えていきます。

「わかったつもり」とは?


AIが生成してくれたVBAコードや、それに対するAIの解説を読んだときに、コードの細部まで完全に理解できたわけではないけれど、「なんとなくこういう処理をしているらしい」「この部分が〇〇に関係しているのかな」と、コード全体の概要や、主要な部分が何をしているのかを、表面的な理解にとどめる状態を、ここでは「わかったつもり」と定義します。

これは、VBAのすべての命令や書き方を詳細に理解するのではなく、AIの解説などを参考にしながら、コードの「絵面」を見て雰囲気を掴む、あるいは主要なステップだけを把握するといった状態です。例えるなら、自動車のエンジンルームを見て、各部品の細かい役割は分からなくても、「これがエンジンで、動力を生み出しているんだな」と理解するようなものです。

(ここに「わかったつもりのイメージ(フワッとした理解、コードの絵面を見ている感じ)」の図解が入ります - 図3-9a)

「たぶんあってる」とは?


一方、「たぶんあってる」とは、AIが生成したVBAコードをExcelで実行した結果について、きちんと確認や検証をせずに、「AIが作ったコードだから、きっと私の意図通りに動いているだろう」「エラーが出なかったから、たぶん大丈夫だろう」と、結果の正確性を安易に信用してしまう状態を指します。

コードを実行して、期待通りの画面表示や結果が得られたように「見えた」としても、それが本当にデータ全体に対して正しく処理されているのか、隠れたエラーはないかなどを確認しない状態です。例えるなら、自動車を運転して目的地に着いたけれど、途中の信号を全て無視していたことに気づかないような危険な状態です。


AIを活用した「書かない自動化」における二つの位置づけ

「わかったつもり」と「たぶんあってる」は、どちらも「深く確認しない」という点では似ているように見えますが、AIを活用した「書かない自動化」においては、その意味合いと危険性が全く異なります。

AIがVBAコードを生成してくれる本書のスタイルでは、あなたがコードを「書く」のではなく、AIに「書かせる」ことが中心です。そのため、生成されたコードのすべての行の意味を完璧に理解すること(つまり、「わかったつもり」を卒業して完全に理解すること)は、必ずしも必須ではありません。AIの解説などを参考に、コードがどのような処理の「塊」でできているのか、といった概要を掴むことができれば、まずは十分と言えます。AIがあなたのVBA先生となって、コードの読み方をサポートしてくれるのですから、コードの細部が「わかったつもり」の状態でも、恐れることはありませんし、それが「書かない自動化」の一つの側面でもあります。

しかし、「たぶんあってる」は全くの別問題です。AIが生成したコードが、見た目にはエラーなく動作したように見えても、それがあなたの求める処理を正確に行っている保証はどこにもありません。ハルシネーションによって間違ったコードが生成されている可能性もゼロではありませんし、あなたの指示の一部が正しく反映されていない可能性もあります。

もし「たぶんあってる」で実行結果の検証を怠ると、気づかないうちにデータが間違って集計されたり、一部のデータが漏れていたり、重要な情報が失われたりする危険性があります。これは、自動化によって業務効率を上げるどころか、かえって大きな損害を招くことになりかねません。

したがって、AIを活用した「書かない自動化」においては、
  • VBAコードの細部が「わかったつもり」の状態でもOK(徐々に理解を深めれば良い)
  • しかし、実行結果が「たぶんあってる」で終わらせるのは絶対にNG! 必ず検証が必要

ということを強く意識することが大切です。

AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

AIが生成したコードの実行結果は必ず「検証」しよう


AIを安全に、そして効果的に活用するためには、AIが生成したVBAコードの実行結果を必ず「検証」することが重要です。検証とは、コードが本当にあなたの目的通りに、正確に動作しているのかを確認する作業のことです。

検証と聞くと難しく感じるかもしれませんが、最初から厳密な正確性を求める必要はありません。前の項目「『このコードは何?』AIにVBAを解説してもらう方法」の「AIの解説をどう活かすか」でも触れましたが、例えば以下のような方法で簡単に始めることができます。

検証の具体的な方法

  • 実際にExcelで動かして結果を確認: AIがVBAコードを生成してくれたら、まずはテスト用のファイル(【重要】コードを実行する際の注意)で実際にコードを実行してみましょう。そして、その実行結果があなたの期待通りになっているかを確認します。エラーが出ないか、データが正しく処理されるか、求めている結果が得られるかなどをチェックしてください。これが最も直接的で重要な検証方法です。
  • 簡単な例で試す: 複雑なデータや状況でいきなり試すのが不安な場合は、シンプルで分かりやすいデータを用意して、AIが生成したコードを試してみましょう。簡単な例で意図通りに動作することを確認できれば、より複雑な状況での動作もある程度予測できます。
  • 複数のAIや他の情報源と照らし合わせる: (ここはコード内容の検証に近いですが、実行結果がなぜそうなるのかの理解を深める意味で有効)もし可能であれば、同じプロンプトを別のAIモデルに投げかけて、回答を比較してみるのも有効です。複数のAIが同じような回答をする場合は、その情報の信頼性は高まります。
  • AIに質問して確認: 実行結果が期待通りでない場合や、どこかおかしいと感じる場合は、「この結果が〇〇になってしまったのですが、なぜでしょうか?」「△△というデータが含まれていないようですが、コードは正しいですか?」のように、具体的な結果を示してAIに質問し、確認することも検証の一つです。

AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

検証はVBA学習のチャンス

AIが生成したコードの実行結果を検証するプロセスは、単に間違いを見つけるためだけのものではありません。AIが提示したコードがなぜそうなるのか、なぜ期待通りの結果にならないのか、といったことを考える過程で、自然とVBAへの理解が深まります。

「なぜエラーが出たんだろう?」「このコードは、どうしてこういう動きをするんだろう?」「希望通りの結果にするにはどこを確認すれば良いんだろう?」といった疑問を持ち、それをAIに質問したり、自分で調べたりしながら解決していくことで、あなたのVBAスキルは着実に向上していきます。

AIはあなたの先生であり、優秀なアシスタントですが、最終的にコードを業務に活用し、その結果に責任を持つのはあなた自身です。AIの回答、特に実行結果を適切に検証し、AIとの対話を通じて学び続ける姿勢こそが、AI×VBAによる自動化を成功させるための重要な鍵となります。

まとめ:AIを賢く使うための「責任ある検証」

AIは強力なツールですが、その回答を鵜呑みにせず、特に実行結果については必ず「本当にこれで合っているかな?」と検証する「責任ある検証」を行うことが重要ですす。「わかったつもり」(コードの概要理解)は許容される場合があっても、「たぶんあってる」(実行結果の検証不足)は思わぬリスクを招きます。AIが生成したコードの実行結果をしっかり検証し、AIとの対話を通じて学びを深めるプロセスは、あなたのVBAスキルを向上させるだけでなく、AI時代を生き抜くための重要なスキルとなるでしょう。

次の項目では、これまでに学んだプロンプト術の基本と、AIとの対話を通じた学習方法を、具体的な実践演習を通して身につけていきます。


【実践演習】プロンプトの書き方で回答が変わる!

これまでの項目で、AIからVBAコードや解説を引き出すための様々なプロンプトテクニックを学びました。良いプロンプトの要素、段階的に伝える方法、そしてAIの回答を改善させる方法など、頭では理解できたかと思います。

この項目では、実際にあなたの手と頭を動かして、これまでに学んだプロンプト術を体験する「実践演習」を行います。一つの同じお題に対して、様々なプロンプトでAIに質問を投げかけ、AIの回答がどのように変化するかを、あなたの目で、そしてExcel上で確かめてみましょう。

この演習を通じて、プロンプトの書き方一つでAIからの回答が大きく変わることを実感し、より効果的なプロンプトを作成するスキルを定着させることができます。

演習テーマ:特定商品の先月売上合計を求める

今回の演習でAIに依頼するお題(シナリオ)を設定します。

あなたは、以下のような売上リストのExcelファイルを持っているとします。
  • 「売上リスト」という名前のシートがある。
  • A列に「日付」、B列に「商品名」、C列に「売上金額」が入力されている。
  • このデータの中から、特定の商品の先月1ヶ月間の売上金額の合計を求めたい。
  • 合計金額は、メッセージボックスで表示したい。

AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

例えば、「商品B」という商品について、先月(演習を行う日の前月)1ヶ月間の売上合計金額を求めるVBAコードをAIに教えてもらう、というのを目標とします。

演習の進め方

演習は、あなたが普段お使いのAIツール(ChatGPT, Geminiなど)とExcelを使って行います。
  1. AIツール(Webサイトやアプリ)を開き、AIとの新しい会話を開始します。
  2. これから示す様々なプロンプト例を、一つずつAIに入力して送信します。
  3. AIからの回答(VBAコードや解説)を確認します。
  4. 必要であれば、AIが提示したVBAコードをExcelのテスト用ファイルに貼り付けて実行し、結果を確認してみましょう。(【重要】必ずテスト用のファイルを使用してください。第3章の「『このコードは何?』AIにVBAを解説してもらう方法」の「【重要】コードを実行する際の注意」を参照)。
  5. それぞれのプロンプトに対して、AIの回答がどのように違うかを観察・比較します。

準備ができたら、最初のプロンプトから試してみましょう。

様々なプロンプトを試して比較してみよう!

これから、先ほどの「特定商品の先月売上合計を求める」というお題に対して、様々なプロンプト例を提示します。それぞれのプロンプトにどのような意図があるのか、そしてAIがどのような回答を返すか、予想しながら進めてみてください。

プロンプト例1:シンプル・情報不足
まずは、最もシンプルに、必要最低限の情報だけで質問してみます。
Excel VBAで、売上リストから特定商品の先月売上合計を出すコードを教えて。
意図:やりたいことだけを簡潔に伝える。必要なシート名やデータ構成などの情報は省略している。

予想されるAIの回答:一般的な売上合計を求めるコードや、日付や商品名で絞り込むための追加質問などが返ってくる可能性が高い。具体性が低いため、このシナリオにぴったりのコードにはなりにくいでしょう。

AIの回答:
承知いたしました。Excel VBAで売上リストの合計を計算するコードですね。
ただし、「売上リスト」というシートのデータの具体的な範囲や、どの列に何の情報が入っているか(商品名や売上金額の列)、特定したい商品の名前、先月1ヶ月間という日付の条件などが不明確なため、今回は一般的な売上合計を求めるコード例を提示します。

VBA
Sub CalculateTotalSales()
  Dim ws As Worksheet
  Dim lastRow As Long
  Dim totalSales As Double

  ' 合計を計算したいシートを指定
  Set ws = ThisWorkbook.Sheets("Sheet1") ' <-- ここを「売上リスト」に変更してください

  lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row ' A列を基準に最終行を取得(データの最終行に合わせてください)

  ' C列(売上金額の列を想定)の合計を計算
  totalSales = Application.WorksheetFunction.Sum(ws.Range("C2:C" & lastRow)) ' C2セルから最終行までを合計

  ' メッセージボックスで合計金額を表示
  MsgBox "売上合計: " & totalSales

End Sub

解説:
このコードは、「Sheet1」(実際には「売上リスト」に変更)というシートのC列(売上金額を想定)のデータを単純に合計して、メッセージボックスに表示するものです。特定の商品の絞り込みや日付の条件は含まれていません。

もし、特定の商品や期間で絞り込みたい場合は、以下の情報を加えて再度質問してください。
  • シートの名前は正確に何ですか?
  • 商品名はどの列に入っていますか?
  • 売上金額はどの列に入っていますか?
  • 日付はどの列に入っていますか?
  • 特定したい商品の名前は何ですか?
  • 集計したい具体的な期間(例:先月1ヶ月)をどのように指定したいですか?

プロンプト例2:目的・要望を具体的に伝える
次に、「良いプロンプトの具体的な要素」で学んだ「目的・要望を明確に具体的に伝える」ことを意識して、シート名や集計条件などを具体的に加えてみます。
Excel VBAで、「売上リスト」というシートにあるデータの中から、商品名が「商品B」で、日付が先月1ヶ月間である行を抽出して、売上金額の合計を求めたいです。A列に「日付」、B列に「商品名」、C列に「売上金額」が入力されています。 合計金額をメッセージボックスで表示するコードを教えてください。
意図:シート名、商品名、期間、集計対象(売上金額)それぞれの列、最終的な表示方法(メッセージボックス)を具体的に伝える。
※シートの画面スクショを貼り付けるとより正確にAIに伝えられます。

AI時代のExcel革命:AI×VBAで“書かない自動化”超入門

予想されるAIの回答:条件に合うデータを絞り込み、合計を計算してメッセージボックスで表示するコードを生成してくれる可能性が高まります。プロンプト例1よりも、より目的に沿ったコードになるでしょう。

AIの回答:
はい、承知いたしました。「売上リスト」シートから商品名が「商品B」で、日付が先月1ヶ月間の売上合計を求め、メッセージボックスで表示するVBAコード例は以下のようになります。

VBA
Sub CalculateSpecificProductLastMonthSales()
  Dim ws As Worksheet
  Dim lastRow As Long
  Dim i As Long
  Dim totalSales As Double
  Dim targetProduct As String
  Dim startDate As Date
  Dim endDate As Date

  Set ws = ThisWorkbook.Sheets("売上リスト") ' 対象シートを設定

  targetProduct = "商品B" ' 集計したい商品名を設定

  ' 先月1ヶ月間の日付範囲を設定
  startDate = DateSerial(Year(Date), Month(Date) - 1, 1) ' 先月1日
  endDate = DateSerial(Year(Date), Month(Date), 1) - 1   ' 先月末日

  totalSales = 0 ' 合計金額を初期化
  lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row ' A列を基準に最終行を取得

  ' データ行をループして条件に合う行の売上金額を合計
  For i = 2 To lastRow ' 2行目から(ヘッダー行を除く)
    ' B列(商品名)が対象商品名 AND A列(日付)が先月1ヶ月間であるか判定
    If ws.Cells(i, "B").Value = targetProduct And _
      ws.Cells(i, "A").Value >= startDate And _
      ws.Cells(i, "A").Value <= endDate Then

      totalSales = totalSales + ws.Cells(i, "C").Value ' C列(売上金額)を合計に加算
    End If
  Next i

  ' メッセージボックスで合計金額を表示
  MsgBox targetProduct & " の先月売上合計: " & totalSales

End Sub

解説:
このコードは、「売上リスト」シートのデータを1行ずつ確認し、B列の商品名が「商品B」であり、かつA列の日付が先月1ヶ月間(startDate から endDate まで)である場合に、C列の売上金額を合計していくものです。
最後に、計算された合計金額をメッセージボックスで表示します。
targetProductstartDate, endDate の設定値を変えることで、集計条件を変更できます。

プロンプト例3:AIに役割を与える
さらに、「良いプロンプトの具体的な要素」で学んだ「AIに役割を与える」ことを加えてみます。
あなたはExcel VBAの初心者向け講師です。

「売上リスト」というシートにあるデータの中から、商品名が「商品B」で、日付が先月1ヶ月間である行を抽出して、売上金額の合計を求めたいです。合計金額をメッセージボックスで表示するコードを教えてください。コードと合わせて、それぞれのコードが何をしているかの簡単な解説もお願いします。
意図:前回のプロンプトに加えて、AIに「初心者向け講師」という役割を与え、回答形式としてコードと解説の両方を求める。

予想されるAIの回答:プロンプト例2と同様に目的に沿ったコードを生成しつつ、コードの各部分についての解説を分かりやすく加えてくれる可能性が高まります。解説の言葉遣いも、初心者向けになることが期待できます。

AIの回答:
はい、お任せください!Excel VBA初心者の方にも分かりやすいように、商品名「商品B」の先月売上合計を求めるコードとその解説をご説明しますね。

まずはコードをご覧ください。

VBA
Sub CalculateSpecificProductLastMonthSalesForBeginner()
  ' --- 変数の準備 ---
  Dim ws As Worksheet     ' 対象となるシート(売上リスト)を入れるための箱
  Dim lastRow As Long    ' データがどこまで入力されているかを知るための箱
  Dim i As Long       ' データを1行ずつ見ていくための数(カウンター)
  Dim totalSales As Double  ' 計算した売上合計を入れておくための箱
  Dim targetProduct As String ' 集計したい商品名を入れておく箱
  Dim startDate As Date   ' 集計したい期間の開始日を入れておく箱
  Dim endDate As Date    ' 集計したい期間の終了日を入れておく箱

  ' --- シートの設定 ---
  ' "売上リスト"という名前のシートを使いますよ、とExcelに伝えます
  Set ws = ThisWorkbook.Sheets("売上リスト")

  ' --- 集計したい条件の設定 ---
  ' 集計したい商品名を「商品B」と設定します
  targetProduct = "商品B"

  ' 集計したい「先月1ヶ月間」の日付範囲を設定します
  ' まず、今日の日付を元に「先月1日」の日付を計算します
  startDate = DateSerial(Year(Date), Month(Date) - 1, 1)
  ' 次に、今日の日付を元に「今月1日」を計算し、そこから1日引いて「先月末日」の日付を計算します
  endDate = DateSerial(Year(Date), Month(Date), 1) - 1

  ' --- 合計金額の計算準備 ---
  ' 合計金額を一旦ゼロにしておきます
  totalSales = 0

  ' "売上リスト"シートのデータが何行目まであるか(A列を基準に)を調べます
  lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row

  ' --- データを1行ずつ確認して合計 ---
  ' 2行目から最終行まで、データを順番に見ていきます (1行目は項目の見出しなので飛ばします)
  For i = 2 To lastRow

    ' もし、今見ている行のB列(商品名)が「商品B」と「同じ」で、かつ
    ' 今見ている行のA列(日付)が「開始日」よりも後か同じ日で、かつ
    ' 今見ている行のA列(日付)が「終了日」よりも前か同じ日だったら(先月1ヶ月間だったら)
    If ws.Cells(i, "B").Value = targetProduct And _
      ws.Cells(i, "A").Value >= startDate And _
      ws.Cells(i, "A").Value <= endDate Then

      ' その行のC列(売上金額)の値を、合計金額に「プラス」します
      totalSales = totalSales + ws.Cells(i, "C").Value

    End If ' もし~だったら、の条件判定はここまで

  Next i ' 次の行を見に行きます

  ' --- 結果の表示 ---
  ' 計算した合計金額を画面に「メッセージボックス」で表示します
  MsgBox targetProduct & " の先月売上合計: " & totalSales

End Sub

解説:
このコードは、ステップを踏んで説明すると以下のようになります。
  1. まず、VBAで使うための「箱」(変数)をいくつか準備します。シートや行番号、合計金額などを一時的に入れておきます。
  2. 次に、「売上リスト」という名前のシートを「これから使いますよ」とExcelに伝えます。
  3. 集計したい商品名(「商品B」)と、集計したい期間(先月1ヶ月間)の開始日と終了日を設定します。日付の計算には DateSerialDateAdd という機能を使っています。
  4. 合計金額を入れる箱をゼロにして、これから合計を計算できるように準備します。
  5. 「売上リスト」シートのデータが何行目まであるか(A列を基準に)を調べます。
  6. データの2行目から最終行までを順番に「ループ」しながら見ていきます。
  7. 見ている行のB列(商品名)とA列(日付)が、あなたが設定した条件(商品名が「商品B」で、日付が先月1ヶ月間)に「もし」合っていたら、その行のC列(売上金額)の値を、合計金額に足し合わせます。
  8. 全ての行を見終わったら、最後に計算された合計金額をメッセージボックスで画面に表示して完了です。

このように、VBAコードは一つ一つの命令が集まって、目的の処理を実行しています。このコードをVBEの標準モジュールに貼り付けて、緑色の実行ボタン(またはF5キー)を押すと、設定した条件で売上合計を計算してくれますよ。

プロンプト例4:データ形式や環境情報を加える
さらに、データ形式や使用環境などの背景情報を加えてみます。
あなたはExcel VBAの初心者向け講師です。
「売上リスト」というシート(A列:日付、B列:商品名、C列:売上金額)にあるデータの中から、商品名が「商品B」で、日付が先月1ヶ月間である行を抽出して、C列の売上金額の合計を求めたいです。合計金額をメッセージボックスで表示するVBAコードを教えてください。

使用しているExcelのバージョンはMicrosoft 365です。
コードと合わせて、それぞれのコードが何をしているかの簡単な解説もお願いします。
意図:これまでの要素に加えて、各列が何の情報を持っているか(A列:日付など)、Excelのバージョンといった背景情報を加える。

予想されるAIの回答:データの構造をより正確に把握できるため、より適切で効率的なコードを生成してくれる可能性が高まります。特定のExcelバージョンに最適化されたコードを生成する場合もあります。

AIの回答:
はい、承知いたしました。Excel Microsoft 365をお使いで、初心者の方にも分かりやすいように、「売上リスト」シートから商品名「商品B」の先月売上合計を求めるコードとその解説をご説明しますね。

データがA列に日付、B列に商品名、C列に売上金額という構成ですね。この情報とExcel 365の機能も考慮して、より効率的な方法でコードを作成します。フィルター機能を使ってデータを絞り込んでから合計する方法がおすすめです。

まずはコードをご覧ください。

VBA
Sub CalculateSpecificProductLastMonthSales_Filter()
  ' --- 変数の準備 ---
  Dim ws As Worksheet     ' 対象となるシート(売上リスト)を入れるための箱
  Dim totalSales As Double  ' 計算した売上合計を入れておくための箱
  Dim targetProduct As String ' 集計したい商品名を入れておく箱
  Dim startDate As Date   ' 集計したい期間の開始日を入れておく箱
  Dim endDate As Date    ' 集計したい期間の終了日を入れておく箱
  Dim filterRange As Range  ' オートフィルターを設定する範囲を入れておく箱

  ' --- シートの設定 ---
  ' "売上リスト"という名前のシートを使いますよ、とExcelに伝えます
  Set ws = ThisWorkbook.Sheets("売上リスト")

  ' --- 集計したい条件の設定 ---
  ' 集計したい商品名を「商品B」と設定します
  targetProduct = "商品B"

  ' 集計したい「先月1ヶ月間」の日付範囲を設定します
  ' まず、今日の日付を元に「先月1日」の日付を計算します
  startDate = DateSerial(Year(Date), Month(Date) - 1, 1)
  ' 次に、今日の日付を元に「今月1日」を計算し、そこから1日引いて「先月末日」の日付を計算します
  endDate = DateSerial(Year(Date), Month(Date), 1) - 1

  ' --- オートフィルターを使ってデータを絞り込み ---
  ' データの範囲全体(A1セルを基準とした連続したデータ範囲)を取得します
  Set filterRange = ws.Range("A1").CurrentRegion

  ' オートフィルターを設定します(もし既にフィルターがかかっていたら解除します)
  If ws.AutoFilterMode Then ws.AutoFilter.ShowAllData
  filterRange.AutoFilter

  ' B列(商品名)で「商品B」に絞り込みます
  filterRange.AutoFilter Field:=2, Criteria1:=targetProduct ' Field:=2 はB列を意味します

  ' A列(日付)で先月1ヶ月間の範囲に絞り込みます
  filterRange.AutoFilter Field:=1, _
              Criteria1:=">=" & startDate, _
              Operator:=xlAnd, _
              Criteria2:="<=" & endDate ' Field:=1 はA列、Operator:=xlAndはAND条件

  ' --- 絞り込まれたデータの合計を計算 ---
  ' C列(売上金額)の、フィルターで表示されているセル(可視セル)だけを合計します
  ' SUBTOTAL関数を使うと、表示されているセルだけを合計できます
  totalSales = Application.WorksheetFunction.Subtotal(9, ws.Range("C2:C" & ws.Cells(Rows.Count, "C").End(xlUp).Row).SpecialCells(xlCellTypeVisible)) ' 9はSUMに対応

  ' --- オートフィルターを解除 ---
  ws.AutoFilter.ShowAllData

  ' --- 結果の表示 ---
  ' 計算した合計金額を画面に「メッセージボックス」で表示します
  MsgBox targetProduct & " の先月売上合計: " & totalSales

End Sub

解説:
このコードは、Excelの「オートフィルター」機能とSUBTOTAL関数をVBAから操作して、データを絞り込み、合計を計算するものです。
  1. まず、対象シートや条件を設定します。
  2. AutoFilter を使って、B列の商品名とA列の日付でデータを絞り込みます。Field は列番号(A列が1、B列が2…)を指定し、Criteria1Criteria2 で絞り込み条件を設定します。
  3. SUBTOTAL(9, ...)SpecialCells(xlCellTypeVisible) を組み合わせて、フィルターで表示されているC列(売上金額)のセルだけを合計します。
  4. 最後に、ShowAllData でフィルターを解除し、合計金額をメッセージボックスで表示します。

オートフィルターを使う方法は、データ量が多い場合にループ処理よりも高速になることがあり、Excel 365などの新しいバージョンでは特に有効です。

プロンプト例5:別の回答形式を試す
メッセージボックスで表示するのではなく、結果を特定のセルに入力してもらいたい場合はどうでしょうか。回答形式を変えて質問してみます。

あなたはExcel VBAの初心者向け講師です。
「売上リスト」というシート(A列:日付、B列:商品名、C列:売上金額)にあるデータの中から、商品名が「商品B」で、日付が先月1ヶ月間である行を抽出して、C列の売上金額の合計を求めたいです。

合計金額を、新しいシートのA1セルに入力するVBAコードを教えてください。
コードと合わせて、それぞれのコードが何をしているかの簡単な解説もお願いします。
意図:合計金額の表示方法をメッセージボックスから特定のセルへの入力に変更する。

予想されるAIの回答:集計した結果をメッセージボックスで表示するコードではなく、集計結果を新しいシートを作成してA1セルに書き込む、という処理を含むVBAコードを生成してくれます。

AIの回答:
はい、承知いたしました。商品名「商品B」の先月売上合計を求め、その結果を新しいシートのA1セルに入力するVBAコードとその解説をご説明しますね。

先ほどのようにオートフィルターを使う方法で集計を行い、その結果をセルに入力するようにコードを修正します。

まずはコードをご覧ください。

VBA
Sub OutputSpecificProductLastMonthSalesToSheet()
  ' --- 変数の準備 ---
  Dim wsSource As Worksheet  ' 元データのあるシート(売上リスト)を入れるための箱
  Dim wsTarget As Worksheet  ' 結果を書き込む新しいシートを入れるための箱
  Dim totalSales As Double  ' 計算した売上合計を入れておくための箱
  Dim targetProduct As String ' 集計したい商品名を入れておく箱
  Dim startDate As Date   ' 集計したい期間の開始日を入れておく箱
  Dim endDate As Date    ' 集計したい期間の終了日を入れておく箱
  Dim filterRange As Range  ' オートフィルターを設定する範囲を入れておく箱

  ' --- シートの設定 ---
  ' "売上リスト"という名前のシートを使います
  Set wsSource = ThisWorkbook.Sheets("売上リスト")

  ' 結果を書き込む「新しい」シートを作成します
  Set wsTarget = ThisWorkbook.Sheets.Add ' 新しいシートを追加
  wsTarget.Name = "集計結果(商品B)" ' 新しいシートに名前をつけます

  ' --- 集計したい条件の設定 ---
  targetProduct = "商品B" ' 集計したい商品名を設定
  startDate = DateSerial(Year(Date), Month(Date) - 1, 1) ' 先月1日
  endDate = DateSerial(Year(Date), Month(Date), 1) - 1   ' 先月末日

  ' --- オートフィルターを使ってデータを絞り込み(先ほどと同じ) ---
  Set filterRange = wsSource.Range("A1").CurrentRegion
  If wsSource.AutoFilterMode Then wsSource.AutoFilter.ShowAllData
  filterRange.AutoFilter
  filterRange.AutoFilter Field:=2, Criteria1:=targetProduct
  filterRange.AutoFilter Field:=1, _
              Criteria1:=">=" & startDate, _
              Operator:=xlAnd, _
              Criteria2:="<=" & endDate

  ' --- 絞り込まれたデータの合計を計算(先ほどと同じ) ---
  totalSales = Application.WorksheetFunction.Subtotal(9, wsSource.Range("C2:C" & wsSource.Cells(Rows.Count, "C").End(xlUp).Row).SpecialCells(xlCellTypeVisible))

  ' --- オートフィルターを解除(先ほどと同じ) ---
  wsSource.AutoFilter.ShowAllData

  ' --- 結果の書き込み ---
  ' 新しいシート(集計結果(商品B))のA1セルに、計算した合計金額を書き込みます
  wsTarget.Range("A1").Value = "商品B 先月合計売上: " & totalSales ' セルに文字と合計金額を入力

  ' --- 結果の表示(メッセージボックスは不要) ---
  MsgBox "集計結果を「" & wsTarget.Name & "」シートのA1セルに入力しました。"

End Sub

解説:
このコードは、先ほどと同じようにオートフィルターでデータを絞り込み、合計金額を計算するところまでは同じです。

異なる点は、計算した合計金額をメッセージボックスで表示する代わりに、
  1. Set wsTarget = ThisWorkbook.Sheets.Add で新しいシートを作成し、
  2. wsTarget.Name = "集計結果(商品B)" でシートに名前をつけ、
  3. wsTarget.Range("A1").Value = ... で、その新しいシートのA1セルに合計金額を書き込んでいる点です。

あなたの要望に合わせて、結果の出力先を柔軟に変更できます。


AIにプロンプト作成を手伝ってもらおう!

さて、ここまで自分で様々なプロンプトを考えて試してみました。でも、実際にAIを使っていて、「そもそも、どういう言葉でAIに質問すれば良いのか分からないな…」と悩んでしまうこともあるかもしれません。

そんな時は、プロンプト作成そのものをAIに手伝ってもらうことができます。AIに「こんなことをしたいんだけど、どういうプロンプトで聞けば良い?」と相談してみましょう。

プロンプト例6:AIにプロンプト案を提案してもらう
あなたはExcel VBAの専門家で、私がExcel作業を自動化したいと考えていることを理解しています。

私がこれからAI(あなた)に依頼したい作業は、「売上リスト」というシートにあるデータの中から、商品名が「商品B」で、日付が先月1ヶ月間である行を抽出して、売上金額の合計を求め、メッセージボックスで表示することです。

この作業を効果的にAI(あなた)に依頼するために、どのようなプロンプトを書けば良いか、プロンプトの構成案や例文をいくつか提案してください。初心者向けに分かりやすく教えてくれると助かります。
意図:やりたいこと(演習テーマ)をAIに伝え、それをAIに依頼するための「プロンプト案」を生成してもらう。役割指定や、提案してほしい内容(構成案、例文)も具体的に伝える。

予想されるAIの回答:AIはあなたの要望を分析し、それをAIに伝えるための「良いプロンプト」の要素(目的、背景、条件など)を含んだプロンプトの構成案や、具体的なプロンプトの例文を提案してくれるでしょう。

AIの回答:
はい、承知いたしました!あなたが「売上リスト」シートから商品名「商品B」の先月売上合計を求め、メッセージボックスで表示するVBAコードを私(AI)から引き出すための、効果的なプロンプトの書き方についてご提案しますね。Excel VBA初心者の方とのことですので、分かりやすさを重視します。

このような依頼をする際は、以下の3つのポイントを意識してプロンプトを作成すると、より的確な回答が得られやすくなります。
  1. 何をしたいのか、具体的に伝える
  2. 対象となるデータ(シート名や列の内容)について説明する
  3. どのような形で回答がほしいか(コードだけ、解説付き、手順など)を指定する

これらのポイントを踏まえたプロンプトの構成案と、具体的な例文をいくつか提案します。

プロンプト構成案:
[あなたの役割設定(任意)]
[依頼の目的・内容を具体的に]
[対象となるデータの情報(シート名、列、形式など)]
[達成したい結果(メッセージボックス表示、セル入力など)]
[求める回答形式(コード、解説、手順など)]
[その他、補足事項(Excelバージョンなど)]

プロンプト例文1(基本的で分かりやすい依頼):
Excel VBAで、「売上リスト」というシートにあるデータの中から、商品名が「商品B」で、日付が先月1ヶ月間である行を抽出して、売上金額の合計を求めたいです。合計金額をメッセージボックスで表示するコードを教えてください。
解説:これは、目的・内容、対象シート、集計条件、表示方法といった必須要素を盛り込んだシンプルな例です。まずはここから始めてみても良いでしょう。

プロンプト例文2(役割と詳細情報を加えた依頼):
あなたはExcel VBAの初心者向け講師です。

私がExcel VBAで実現したいことは、「売上リスト」というシートのデータ(A列:日付、B列:商品名、C列:売上金額)から、商品名が「商品B」で、日付が先月1ヶ月間である行のC列(売上金額)の合計を計算することです。計算結果をメッセージボックスで表示したいです。
この処理を行うVBAコードと、コードの各行が何をしているかの簡単な解説を、初心者にも分かりやすいように教えてください。使用しているExcelはMicrosoft 365です。
解説:例文1に加えて、AIに「初心者向け講師」という役割を与え、データの列構成やExcelバージョンといった詳細情報、コード解説も求めることで、より質の高い回答が期待できます。本書でおすすめしているプロンプトの形に近いですね。

プロンプト例文3(段階的に質問したい場合):
あなたはExcel VBAの初心者向け講師です。
「売上リスト」シートのデータから、商品名「商品B」の先月売上合計を求めたいです。この処理を行うためのVBAコードを、いくつかのステップに分けて段階的に教えてもらえませんか?

まず最初のステップとして、先月の日付範囲を判定してデータを絞り込む部分のコードを教えてください。
解説:複雑な処理を一度に依頼するのではなく、段階的にコードを教えてほしい場合に有効なプロンプトです。「段階的に教えて」テクニックを使う際に活用できます。

これらの例文を参考に、あなたの状況や求める回答に合わせてプロンプトを組み立ててみてください。


演習結果から学ぶこと

これらのプロンプト例を実際にAIツールで試してみて、AIの回答がそれぞれどのように異なったかを確認できたかと思います。(AIの性質上、全く同じ回答になるとは限りませんが、回答の傾向やコードの構造が変化したことが観察できたはずです。)

この演習を通じて、以下の点を実感していただけたのではないでしょうか。

プロンプトの情報量と具体性が、AIの回答の質を大きく左右する。
AIに役割を与えたり、回答形式を指定したりすることで、あなたの求める形に近い回答を引き出せる。
AIは、与えられたプロンプトの内容を正確に反映しようとする。(だからこそ、プロンプトの質が重要!)
プロンプトの書き方に迷ったら、AI自身に相談してみるのも有効なアプローチである。
AIをあなたの「自分だけのVBA先生」として使いこなすためには、今回学んだ「良いプロンプト」の要素を意識し、様々なプロンプトを試してみることが大切です。最初は戸惑うかもしれませんが、試行錯誤を通じて、AIとの効果的なコミュニケーションの方法が掴めてくるはずです。


より高度なプロンプト作成の実践ガイド

第3章のこれまでの項目を通して、AIをあなたの「VBA先生」や「アシスタント」として活用するための、プロンプト作成の基本から実践、そしてAI回答の検証まで、様々なテクニックを学んできました。これらの知識とスキルを活用すれば、多くのExcel作業の自動化やVBA学習において、AIはあなたの強力なパートナーとなるはずです。

しかし、AIとの対話の世界は奥深く、本書でご紹介した内容は、その入り口に過ぎません。AIは、さらに複雑な指示を理解したり、より創造的なアイデアを生み出したり、長文の要約や生成を行ったりと、多岐にわたるタスクをこなす能力を秘めています。そして、その力を最大限に引き出すためには、さらに進んだプロンプト作成のテクニックが存在します。

もし、本書の基本的なプロンプトのコツを掴んで、「もっとAIと上手に対話して、色々なお願いをAIにしてみたい!」「AIの隠されたパワーをもっと引き出してみたい!」と感じたら、さらに進んだプロンプト作成の方法を学んでみるのはどうでしょうか?

さらに深いAI活用の世界へ:実践ガイドのご紹介

そんなあなたの探求心を刺激する情報として、私のブログ記事「すぐに使える!生成AI プロンプト作成 実践ガイド」をご紹介します。

この記事では、本書の相棒でもあるAI(Google Gemini)と私(著者)が一緒に、AIからよりすごいパワーを引き出すための、たくさんのプロンプトテクニックを試しながら、分かりやすくまとめてみました。
本記事でプロンプトの基本をしっかりと掴んだら、ぜひこちらも読んでみてください。あなたのAI活用スキルを一段とレベルアップさせてくれるはずです。

すぐに使える!生成AI プロンプト作成 実践ガイド
・■ このガイドラインの構成 ・1. このガイドラインの目的と概要 ・2. まずはイメージから:完成されたプロンプトの例 ・3. プロンプト作成の準備:簡易チェックリスト ・4. Markdown記法とは?:AIへの指示と出力を構造化する記法 ・5. プロンプト作成の核心:テンプレート項目の詳細解説 ・6. 実践テクニック:プロンプト修正(イテレーション)の具体例 ・7. さらに活用するために:重要な注意点とよくある質問(FAQ) ・8. 手軽に始める:軽量版プロンプト作成テンプレート ・9. すぐに使える:プロンプト作成テンプレート(記入用フォーム形式) ・10. 【付録】VBA作成依頼プロンプト例集

すぐに使える:プロンプト作成テンプレート(記入用フォーム形式)
生成AIプロンプト作成テンプレート(記入用)

【1. 目的】
(このプロンプトで何を達成したいか、最終的なアウトプットとその用途)
記入:

【2. 背景・状況】
(タスクを取り巻く背景情報、プロンプトを使う具体的な場面)
記入:

【3. 役割・ペルソナ】
(AIにどのような立場で回答してほしいか)
記入:

【4. 指示内容】
(AIに具体的に行ってほしいアクション)
記入:

【5. 含める要素】
(出力に必ず含めてほしい情報、キーワード、視点など)
記入:

【6. 除外要素】
(出力に含めてほしくない情報、表現など)
記入:

【7. 読者・受け手】
(生成された出力を見る人がどのような人物か)
記入:

【8. 出力粒度】
(出力の情報の深さや詳細度)
記入:

【9. 出力形式】
(アウトプットの具体的な形式、構成、文字数など)
記入:

【10. トーン・文体】
(出力の雰囲気や口調)
記入:

【11. 制約】
(タスク全体に適用される特別なルールや制限)
記入:

【12. 参考資料・例】
(AIの理解を助ける情報源や、求める出力のサンプル)
記入:


まとめ:AIを「自分だけのVBA先生」にするプロンプト術を習得!

この第3章では、「AIを『自分だけのVBA先生』にする!」という目標のもと、AIからVBAコードや解説を効果的に引き出すための「プロンプト術」を集中的に学びました。
AIとの対話を通じてVBAを学ぶという本書の学習スタイルにおいて、適切なプロンプトを書くことがいかに重要であるかを理解し、そのための具体的なテクニックを一つずつ身につけてきました。

具体的には、
  • AIに意図を正確に伝えるための良いプロンプトに含めるべき要素(目的、背景、役割、形式、具体例など)
  • 複雑な要望や問題を解決するために、AIとステップを踏んでやり取りする**「段階的に教えて」テクニック**
  • AIの回答が期待通りでなかった場合に、より良い答えを引き出すための**「プロンプト強化法」**
  • AIの回答を鵜呑みにせず、特に実行結果について必ず検証することの重要性、そして**「わかったつもり」と「たぶんあってる」の決定的な違い**
    さらに高度なAI活用につながる、プロンプト作成の発展的な考え方と実践に役立つテンプレート
などを学びました。
これらのプロンプト術は、AIを単なる検索ツールとしてではなく、あなたの状況やレベルに合わせて柔軟にサポートしてくれる、まさに「自分だけのVBA先生」や「優秀なプログラミングアシスタント」として使いこなすための鍵となります。AIとの対話を通じて学び、試行錯誤を重ねることで、あなたのVBAスキルは着実に向上していくでしょう。

第4章では、第3章で習得したプロンプト術を実践的に活用し、実際のExcel業務でよく遭遇する具体的なシナリオをAIと共に自動化していくことに挑戦します。データの整形から集計、レポート作成など、実務に役立つ自動化タスクを通して、AI×VBAによる「書かない自動化」の世界をさらに深く体験していきます。

プロンプトという「AIへの話し方」を学んだあなたは、もうAIと二人三脚で様々な自動化を実現する準備ができています。次の章で、一緒にAIを活用した自動化を実践していきましょう!


※本記事の作成にあたっては、生成AI(ChatGPT、Gemini、Claude)を活用し、文章および引用データの作成を行っています。最終的な内容は人間による確認・編集を経て掲載しています。





同じテーマ「AI×VBAで“書かない自動化”」の記事

AI時代のExcel革命:AI×VBAで“書かない自動化”超入門
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する!
第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方
第6章:AIとVBAを学び続ける!あなたの「超効率化」を止めないヒント


新着記事NEW ・・・新着記事一覧を見る

第6章:AIとVBAを学び続ける!あなたの「超効率化」を止めないヒント|生成AI活用研究(2025-05-22)
第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方 |生成AI活用研究(2025-05-21)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する! |生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ