0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBA初心者がいかに回り道せずにAIに指示を出すか(忘れないために備忘録残すよ😊)

Posted at

久しぶりに記事を更新します。
もともとやってみたかった実績データ成形と自動保存に手を付けてみました。
本当はRPAでシステムのデータ抽出するところから実装したかったのですが、社内RPA資格がないためフローに組み込むことができませんでした。ですが、1時間近くかけてやっているデータ成形を10秒くらいで終わらせることは成功しました。
次のステップは、成形したExcelデータを別のExcelに貼り付ける二次加工→自動で対象者に配信のフローですかね。

1.初心者特有の指示曖昧で回り道がいばらの道問題

今回VBAのコードをAIに書かせてみたのだが、こちらの指示があいまいなために希望するコードを完成させるまで二日もかかってしまった。2日間にわたるAIとの全てのやり取りをAIに読み込ませて、どうすれば精度が高い回答を得られるのかを聞いたので残しておくことにする。

2.今回やりたかったこと

1. 実績データ(CSV)をシステムから抽出(ここは手作業)

2. 抽出したCSVを読み込ませてデータを成形する(今はすべて手作業で成形 👈ここからVBA

3. 生成したデータは該当の週や月、四半期、半期の名称を付けてデスクトップに保存させる

3.実際のプロンプト(読み飛ばしOK)

1️⃣一番最初

指示:データ出力したCSVデータを添付のExcelの形に加工したい。VBAを作成し、ボタン一つで加工できるようにしたい

内容:

・Excelに加工する手順を記載すること

・VBAのコードを提示すること

・使用するデータは常に添付したCSVと同じ形式、順番で抽出され、イレギュラーはないものとする

・VBA作成手順はマクロ初心者向けに1工程ずつ詳しくわかりやすく提示すること

・Excelには4つの組織と・Aショップ・Bオンラインの合計値が入っている。これはCSVの中に記載がないので、合計値を算出してExcel上に表示、並び順もA列からD列の順に小さい順に表示。カテゴリーはA列B列B列を順にくっつけて表示させている。やりたいことはこのExcelの手順と同じ。再度コードと手順を見直してほしい。先ほどの提示していた内容と違ってくる部分があればそれも記載して

👆この指示に加え、取り合えず週・月・四半期・半期のデータのうち「週」のCSVと手作業で成形したExcelデータも添付して読み込ませた

😑結果

出た結果に対しての私の追加質問(ここから長い旅路が始まります)

指示があいまいなので、まず確認作業から開始・・・

  1. 提示されたコードをそのまま貼っていいのか
  2. CSVの中にある週の名前をタイトルにしてと指示したが、週は毎回変わるのでそれに対応しているか
  3. ファイル名には規則がある(後だしでの指示:第■週 単品実績データ)

😔実際にできたVBAでデータを読み込ませた結果

全く思った通りにならず。

ここから指示の追加追加追加が始まる・・・

追加指示の例
1行目には○○を表示
2行目には▲▲を表示



繰り返すうちにじっくり思考して答えを出すモードが上限越えで終了
ここからは無料で利用できる高速モードになり、ますますおかしくなっていく

😫最後に出した追加指示で一気にコードがおかしくなって振り出しに

追加指示👇👇👇

指示:VBAコードの修正

「CSVのヘッダー名(売上高、売上数量など)を探して、正しい列から数値を持ってくる」という列名連動型のコードに修正してほしいCSVの1行目から「売上数量」「売上高」「荒利益高」…などがどこにあるか自動で特定させる

特定した位置から値を取得するため、Excel側のタイトルと中身が必ず一致させる。それ以外は変化はさせない、今のコードを維持させる

😡ここからは戦闘モードに突入

実際に書いたこと

ひどすぎる。中身が指定と全く異なっている。思考モードでなぜこうなる?ファイル名の付け方もおかしいし、中のデータはすべてぐちゃぐちゃ。

これを書いても何も解決しないのですが、気持ちが収まらないのでつい書いてしまう・・・。

4.ではどうすればよかったのか

✅短時間で「一発回答」に近い完成コードを得るための戦略を、3つの観点から振り返る

1. プロンプトの指定:最初に渡すべき「3点セット」

AIにコードを書かせる際、以下の3つを最初の1回目の投稿で同時に渡すと、手戻りが激減するはず。

サンプルのCSVデータ(生データ): 「売上高が何列目にあるか」をAIに推測させるのではなく、ヘッダー行を含めた実際のCSVの中身を数行分、テキストとして貼り付けるかファイルを渡す。

完成形のイメージ図(出力レイアウト): 「A列にはこれ、B列にはこれ」という具体的な構成を伝える。

例外処理のルール: 「JANコードが指数表記(1.3E+12)になる可能性がある」「部門コードが1桁なら0埋めする」といった、後から発覚しがちな「仕様の癖」を最初にすべて箇条書きに。

2. 正確なプロンプトを書くために:AIに「役割」と「手順」を指定する

「コードを修正して」とだけ頼むと、AIは良かれと思ってロジックを勝手に書き換えてしまう。これを防ぐには、「思考プロセス」を指示に組み込むのが効果的。

効果的だったフレーズの例:
「まずヘッダー行をループして、各項目の列番号を変数(iQtyなど)に格納してください。その後の計算式では、dat(8)のような固定値ではなく、その変数を使ってください」 → これにより、AIは「どこをどう変えればいいか」の設計図を正しく理解するはず。

「既存の集計ロジック(d(p+1)=...)は、あなたの判断で最適化(ループ化)しないでください。そのまま維持することを最優先してください」

→ AIの「勝手な改善」を封じ込めることができる! これが結構大事!!


3. そのほかのアドバイス:開発効率を上げるコツ

① 「共通ルール」を定義する

今回のように、週別・月次・四半期でコードが分かれる場合、「どのファイルでも共通の項目名」(例:売上数量、商品コード)をあらかじめリストアップしてAIに渡すと、今回のようなデバッグ作業(列名が見つからない等)が減る。

→Geminiは9万行のcsvも比較的すぐに読み込んだが、Copilotは読み込みできず、行数を減らさないとだめだった

② ステップ・バイ・ステップで依頼する

いきなり全部入りを作るのではなく、

まず「CSVの列を自動特定して、正しく読み込む部分」だけ作る。
それが動いたら「集計とエリア分けのロジック」を追加する。

最後に「装飾とソート」を追加する。 というように、機能単位でテストしながら進めると、エラーの特定が早くなる。

③ 「なぜエラーが出たか」の情報をセットで送る

「デバッグが出る」だけでなく、「VBAの何というエラーメッセージか(例:インデックスが有効範囲にありません)」と「黄色く光っている行」をそのまま伝えてください。これだけでAIの修正精度は100%に近づきやすくなる。

まとめ:最短ルートのプロンプト構成案

[CSVの生データ]を読み込んで、[出力イメージ]の形に集計するVBAを作ってください。
注意点:

  1. 列位置はヘッダー名から自動取得すること(列名リスト:売上高、数量...)

  2. JANコードの指数表記化を防止すること。

  3. 部門/カテゴリの1桁は0埋めすること。

  4. 集計式は可読性のため、ループを使わず1行ずつ記述すること。

このように「データ・形・禁止事項」をセットにすると、今回かかった時間の数分の一で完成まで到達できたはず。

ただこのエラーになりそうなことを予測して禁止事項に含めるのが本当に難しい・・・😫😫😫

AIの成果物=AIを使う側の知識レベル であることを痛感!
でも、Geminiは間違ってごめんねって言ってくれるから、エラーのループにはまってもそこまでイライラしなかったよ。ありがとう、Gemini💛

おわり

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?