【VBA×AI】Excelを1秒でCSV化!Geminiに指示した「75点のプロンプト」と改善点

AI活用

 こんにちは、あずるです。

 ブログ運営や投資分析(競艇・パチスロ含む)をしていると、「ExcelのデータをAI(GeminiやChatGPT)に読み込ませて分析したい」という場面が多々あります。

 ですが、そのたびに以下の手順を踏むのは非常に「面倒」ではありませんか?

  1. 「名前を付けて保存」を選択
  2. ファイルの種類から「CSV (UTF-8)」を探して選択
  3. ファイル名が重複しないように日付を手入力
  4. 保存

「これをワンクリックで終わらせたい」

 そう思い立ち、Geminiにお願いして「現在開いているシートを即座にCSV化するVBAマクロ」作ってもらいました。

 今回は、コピペで使える「完成コード」の紹介と、それをAIに作らせた際の「指示(プロンプト)の反省点」を共有します。AI使いこなしの参考になれば幸いです


成果物:コピペで使える「CSV自動出力マクロ」

まずは結論から。以下のコードを標準モジュールにコピペすれば、「現在のアクティブシート」「日時付きのCSVファイル」として、「Excelと同じフォルダ」に一瞬で保存できます。

 AI読み込み用にUTF-8形式で出力するようにしています。

Sub ExportActiveSheetToCSV()
    ' 変数宣言
    Dim ws As Worksheet
    Dim savePath As String
    Dim fileName As String
    Dim fullPath As String
    
    ' 対象は現在アクティブなシート
    Set ws = ActiveSheet
    
    ' 保存先は、このExcelファイルと同じ場所
    savePath = ThisWorkbook.Path
    
    ' ファイル名:元のシート名_日時.csv
    ' (例:PVデータ_20250207_1200.csv)
    ' ※日時をつけることで、過去のデータと混ざるのを防ぎます
    fileName = ws.Name & "_" & Format(Now, "yyyymmdd_hhnn") & ".csv"
    
    ' フルパス生成
    fullPath = savePath & "\" & fileName
    
    ' 画面更新と警告の停止(処理高速化と上書き確認ダイアログ防止)
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    ' 新しいブックにシートをコピー(元のブックをCSV化しないための処置)
    ws.Copy
    
    ' CSVとして保存
    ' FileFormat:=xlCSVUTF8 (62) は Excel 2016以降で使用可能
    ' それ以前の場合は xlCSV (6) を使用してください
    On Error Resume Next ' エラーハンドリング(保存キャンセル等)
    With ActiveWorkbook
        .SaveAs Filename:=fullPath, FileFormat:=xlCSVUTF8, Local:=True
        .Close SaveChanges:=False
    End With
    On Error GoTo 0
    
    ' 設定を元に戻す
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    ' 完了メッセージ
    MsgBox "CSVファイルを出力しました:" & vbCrLf & fileName, vbInformation, "出力完了"

End Sub

Geminiが読み込みやすいファイル形式について、そのうち調べ記事にします。

使い方

  1. Excelで Alt + F11 を押してVBAエディタを開く。
  2. 「挿入」→「標準モジュール」を選択。
  3. 上記のコードを貼り付ける。
  4. 保存したいシートを開いた状態でマクロを実行。

 これで、AIにデータを投げる準備が1秒で終わります。

VBAコードの動き解説

このコードの便利な点は3つです。

  1. 元データを壊さない:シートをコピーしてから保存するので、作業中のファイルは安全です。
  2. ファイル名自動化yyyymmdd_hhnn(年月日時分)が自動でつくので、上書き確認の手間がありません。
  3. AI連携に強い:Geminiなどが読みやすい「UTF-8」形式で出力されます。

・9行目を変えれば指定したワークシートに出来ます。
Set ws = ActiveSheet

Set ws = Sheets(“シート名”)


実践記録:AIにコードを書かせたプロンプトの評価

 さて、ここからが本題です。 このコードを作成するために、私がGeminiへ実際に送った指示(プロンプト)と、それに対するGeminiからの「辛口評価」を紹介します。

【75点】実際に送ったプロンプト(改善前)

 私が最初に送ったプロンプトは以下の通りです。かなり「ざっくり」しています。

# 状況
・ブログ記事のPV数の推移を図るためにVBAを組んだ。
・Geminiに提出するのは「.csv形式」が望ましい。
・毎回手動で保存するのはめんどくさい

# 最終目標
・第一優先:私の業務の効率化を果たし、スムーズにGeminiへ情報を提供できるシステムを構築する。

# あなたのすること
・まず最初にVBAコードを教えてください。

# 制約事項
・作動に必要なExcelのバージョンがあるのなら明記すること。

 Geminiのペルソナを「Geminiを使いこなすアドバイザー」に切り替え、以下の質問を投げかけました。

あずる
あずる

・今回GeminiにVBAコードを用意してもらいました。
>私がしたGeminiへのプロンプトを評価してください。
>>今後に生かせるように**忌憚なく**評価してください。

GeminiPRO
GeminiPRO

総合点:75点(合格点ですが、AIの「推測」に頼った部分があります)

 Geminiの評価は「75点」でした。 コード自体は動きましたが、プロの視点では「危険な指示」だったようです。

AIからの指摘「ファイル名と保存場所はどうする?」

 Geminiから返ってきたフィードバック(Badポイント)は以下の通りです。

⚠️ 改善すべき点(Bad) 「保存場所」と「ファイル名」の定義不足

 今回のプロンプトには「どこに保存するか」「どんなファイル名にするか」の指示がありませんでした。 私は気を利かせて「同じフォルダ」に「日時付きファイル名」で作成しましたが、気の利かないAIだと「デスクトップに test.csv という名前で上書き保存するコードを書く可能性があります。これでは実務で事故(データ消失など)の元です。

 これは痛い指摘です。 私は「いい感じにやってくれるだろう」と無意識に甘えていましたが、もしAIが「test.csv」で毎回上書きするコードを書いていたら、過去のログが消えていたかもしれません。

【100点】修正後の模範プロンプト

GeminiPRO
GeminiPRO

模範:「100点満点のプロンプト(要件定義部分)」

# 要件定義

  1. 対象データ: アクティブなシートのみ。
  2. 保存場所: このExcelブックと同じフォルダ(ThisWorkbook.Path)。
  3. ファイル名: 「元のシート名_yyyymmdd_hhmm.csv」として、日時のタイムスタンプを付与すること(上書き防止のため)。
  4. 文字コード: Gemini等のAIに読み込ませるため、「UTF-8」形式で保存すること。
  5. 挙動:
    • 処理中は画面更新を停止し、高速化すること。
    • 保存完了時にメッセージボックスを表示すること。

 これなら、どのAIに頼んでも間違いなく「安全で使えるコード」が出力されます。


教訓:AIへの指示は「要件定義」が9割

 今回の件で改めて痛感したのは、「AIのアウトプットの質は、こちらの要件定義(インプット)で決まる」ということです。

  • 75点の指示:「めんどくさいからCSV保存したい」
    • 結果:AIの「気遣い」に依存する。運が悪いと使いにくいコードになる。
  • 100点の指示:「場所はここ、名前はこう、形式はこれ」
    • 結果:一発で実務レベルのツールが完成する。

 特にVBAのようなプログラムを書かせる場合、「ファイル名」や「保存場所」といった具体的な挙動は、AI任せにせず言語化する必要があります。


まとめ

 今回は、Geminiを活用して業務効率化ツールを作った事例を紹介しました。

  • ExcelデータをAI分析用にCSV化するマクロは超便利。
  • AIへの指示は「推測」させない。「要件」をガチガチに固めるのがコツ。

 こうした小さな時間の節約(時短)が重要です。浮いた時間で、また新しい分析や記事執筆に取り組んでいきます。

 皆さんも、AIにコードを書かせるときは「要件定義」を意識してみてください。一発で思い通りのものができると、かなり気持ちいいですよ。

コメント

タイトルとURLをコピーしました