AIと一緒にExcelマクロ【応用編】:実用例とコード改造のヒント

AI

こんにちは!下町AI探究者のガジュマロです。

前回の「AIと一緒にExcelマクロ【基本編】:「難しそう」を「まずやってみよう!」へ」では、AIの力を借りて、Excelマクロへの第一歩を踏み出す方法をご紹介しました。「選択したセルを黄色にする」という簡単なマクロ、試していただけましたでしょうか?

「思ったより簡単だった」「AIってこんなこともできるんだ」と感じていただけたなら、とても嬉しいです。あの簡単な作業の中にも、AIに依頼し、コードを受け取り、Excelに登録して実行する、という一連の流れがありましたね。

さて、今回は【応用編】です。基本編で掴んだ感覚をもとに、もう少し実際の業務に近い例でAIにマクロ作成をお願いしてみましょう。さらに、基本編でも少し触れましたが、AIが作ってくれたコードや、あるいは既存のマクロコードを、自分のやりたいことに合わせて「改造」していくためのヒントも探っていきます。

AIとの対話を通じて、マクロをより身近な、そして頼れるツールにしていく。そんなステップに、一緒に進んでみませんか?

おさらい:AIを使ったマクロの作成

基本編では、AIがマクロ作成において、

  1. コード(VBA)を作成してくれる
  2. 既存のコードを説明してくれる
  3. 既存のコードを改造してくれる
  4. エラー解決の手助けをしてくれる

といった、まさに「相談相手」や「アシスタント」のような役割を果たしてくれる可能性がある、というお話をしました。

応用編では、特にこの「コード作成」と「コード改造」に焦点を当てて、具体的な使い方を見ていきましょう。

【実践例】特定の条件に合うデータを別シートにコピーするマクロ

では、少し具体的な業務シーンを想定してみましょう。

お題: Sheet1にある顧客リストから、「ステータス」列(C列とします)が「完了」になっている行だけを、Sheet2に丸ごとコピーする

毎月の報告業務などで、特定の条件に合うデータだけを抜き出してまとめたい、といった場面は少なくないのではないでしょうか。これを手作業でやると時間がかかったり、コピー漏れなどのミスも気になりますよね。

ステップ1:AIへのお願い(プロンプト)を作る

まずAIに、やってほしいことを伝えます。基本編と違うのは、なるべく具体的に作業内容を伝えるということです。お題を伝えるのと同時に、自身が普段行っている手順をそのまま具体的に列挙していくと、プロンプトを作りやすいと思います。

あなた:
Excel VBAについて教えてください。
以下の処理を行うマクロのコードを作成してください。

お題:Sheet1にある顧客リストから、「ステータス」列が「完了」になっている行だけを、Sheet2に丸ごとコピーする

1. “Sheet1″という名前のシートのA列からE列までのデータ範囲を対象とします。
2. その中のC列(ステータス列)の値が「完了」となっている行を探します。
3. 条件に一致した行全体(A列からE列まで)をコピーします。
4. コピーした行を、”Sheet2″という名前のシートのA列から始まる次の空いている行に貼り付けます。
5. Sheet2には見出し行はコピーせず、データのみを貼り付けてください。

プロンプトを作るポイント:
シート名(”Sheet1″, “Sheet2″)や対象列(A列からE列, C列)、条件(「完了」)、貼り付けのルール(次の空いている行, 見出し不要)など、出来るだけ具体的に記述してください。ただし、あまり肩ひじを張ることはありません。曖昧な部分はAIが指摘してくれるので、その都度修正をお願いすれば大丈夫です。

ステップ2:AIからの回答(コード例)を確認する

AIは、おそらく次のような構造のVBAコードを提案してくれるでしょう(AIや指示の仕方によって細部は異なります)。

AI:

Sub CopyCompletedRows()
Dim wsSource As Worksheet ' コピー元シートを入れる変数
Dim wsDest As Worksheet ' コピー先シートを入れる変数
Dim lastRowSource As Long ' コピー元シートの最終行番号を入れる変数
Dim lastRowDest As Long ' コピー先シートの最終行番号(貼り付け先の行を決めるため)を入れる変数
Dim i As Long ' ループ(繰り返し処理)で使うカウンター変数

' 操作対象のシートを明確にする
Set wsSource = ThisWorkbook.Sheets("Sheet1")
Set wsDest = ThisWorkbook.Sheets("Sheet2")

' コピー元シート(Sheet1)のデータがある最終行を取得
lastRowSource = wsSource.Cells(Rows.Count, "A").End(xlUp).Row

' コピー先シート(Sheet2)で、次に追加する行の番号を見つける
lastRowDest = wsDest.Cells(Rows.Count, "A").End(xlUp).Row
' もしSheet2の1行目が空なら、1行目から貼り付けるように調整
If wsDest.Cells(1, "A").Value = "" Then
    lastRowDest = 0
End If

' Sheet1の2行目から最終行まで、1行ずつチェックするループ
For i = 2 To lastRowSource ' ※1行目は見出しと想定して、2行目からチェック
    ' もしC列の値が「完了」だったら…
    If wsSource.Cells(i, "C").Value = "完了" Then
        ' その行のA列からE列までをコピーして…
        wsSource.Rows(i).Columns("A:E").Copy
        ' Sheet2の次の空いている行に貼り付け (値と数値の書式のみ)
        wsDest.Rows(lastRowDest + 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        ' 次の貼り付けのために、貼り付け先の行番号を1つ増やす
        lastRowDest = lastRowDest + 1
    End If
Next i ' 次の行へ (lastRowSourceまで繰り返す)

' コピーモードを解除 (点線の囲みを消す)
Application.CutCopyMode = False

' 処理完了のメッセージを表示
MsgBox "処理が完了しました。"
End Sub

基本編のコードより大分長くなりましたが、コードの中にあるコメント(’で始まる緑色の文字)が、処理の流れを理解するヒントになりますね。変数(Dimで宣言されているもの)が何のために使われているかなども、AIは説明してくれることが多いです。更に知りたいことがあったら、AIに質問してしまいましょう。

ステップ3:AIが作ったコードを「改造」してみるヒント

ここからが応用編のポイントです。AIが作ってくれたコードは、あくまで出発点。実際の業務では、「あ、やっぱり条件を変えたい」「コピーする範囲が違った」「シート名がこれじゃなかった」など、変更したい点が出てくることはよくあります。

基本編で「既存のマクロコードを改造してくれる」というAIの役割に触れましたが、まさにここがAIの腕の見せ所です。自分でコードを直接書き換えるのが不安な場合でも、AIに「こう変えてほしい」とお願いすることで、コードの改造が可能になります。

例えば、こんな風にAIにお願いしてみましょう。

「完了」じゃなくて「至急」のデータをコピーしたい場合:

あなた:

先ほど作ってもらったVBAコードについて質問です。
C列の値が「完了」の行をコピーする部分を、「至急」の行をコピーするように変更してください。

 → AIは If wsSource.Cells(i, “C”).Value = “完了” Then の部分を If wsSource.Cells(i, “C”).Value = “至急” Then に修正したコードを提案してくれるはずです。

チェックする列がC列じゃなくてD列だった場合:

あなた:
このVBAコードで、チェックする列をC列からD列に変更してください。

→ AIは Cells(i, “C”) を使っている箇所を Cells(i, “D”) に修正してくれるでしょう。

コピー先のシート名が Sheet2 じゃなくて「報告用シート」だった場合:

あなた:
このVBAコードのコピー先シート名を “Sheet2” から “報告用シート” に変更してください。

 → AIは Set wsDest = ThisWorkbook.Sheets(“Sheet2”) の部分を Set wsDest = ThisWorkbook.Sheets(“報告用シート”) に修正してくれるはずです。

コピーする列範囲が A列からE列 ではなく、A列からG列 だった場合:

あなた:
このVBAコードで、コピーする列の範囲を A列からE列 ではなく、A列からG列 に変更してください。

→ AIは wsSource.Rows(i).Columns(“A:E”).Copy の部分を wsSource.Rows(i).Columns(“A:G”).Copy に修正してくれるでしょう。

改造のコツ:

  • 具体的な指示を心がける: 「どこ」を「どのように」変更したいのか、AIに分かりやすく伝えることが大切です。
  • 少しずつ試す: 一度にたくさんの変更をお願いするより、一つずつ変更して、その都度テストする方が、問題が起きた時に原因を見つけやすいです。
  • 元のコードは保管しておく: 改造をお願いする前に、元のコードをコピーしてメモ帳などに保存しておくと、うまくいかなかった時に元に戻せるので安心です。
  • 自分で直接書き換えてもOK: AIの説明を参考に、コードの該当箇所を見つけて自分で修正するのも、理解を深める良い方法です。
  • 一旦作り直すのもあり:変更をお願いしているうちに一旦エラーが発生すると、何度修正依頼をしてもエラーが解決しなくなる場合があります。その場合は、プロンプトをそれまでの変更を加味して作り直し、新しいチャットでもう一度マクロを作成し直してもらう手もありです。

ステップ4:実行して確認する

AIに改造してもらったコードや、自分で修正したコードを、基本編と同様に [Alt] + [F11] でVBAエディターを開き、貼り付け(または修正)します。そして、Excelシートに戻り、[Alt] + [F8] キーを同時に押します。「マクロ」ダイアログボックスが表示されるので、実行したいマクロ名(例:「CopyCompletedRows」)を選択し、[実行] ボタンをクリックします。

(もし実行時にセキュリティに関する警告バーが表示された場合は、基本編で触れた「コンテンツの有効化」が必要な場合があることを思い出してくださいね。)

期待通りの結果になるか確認しましょう。テスト用のファイルで試す、という基本は応用編でも変わりませんので、実際のデータで試してみたい、という場合は、必ずコピーしたファイルで試しましょう。

もしエラーが出たら? それもAIとの対話のチャンス

改造していると、時にはエラーメッセージが表示されたり、思ったように動かなかったりすることもあるでしょう。「あぁ、やっぱり難しい…」と心が折れそうになる瞬間かもしれません。

でも、そんな時こそ、AIの出番です! 基本編でも触れたように、エラーメッセージをそのままコピーしてAIに「このエラーはどういう意味ですか?」「このコードを実行したらこのエラーが出ました。どこがおかしい可能性がありますか?」と質問してみましょう。

エラーの原因を探るヒントや、修正案をAIが教えてくれることも少なくありません。エラーは失敗ではなく、AIとの対話を通じてマクロの理解を深めるチャンス、と捉えてみるのはいかがでしょうか。

まとめ: AIと二人三脚で、マクロをもっと身近に

今回は【応用編】として、少し実践的なマクロの作成例と、AIの助けを借りながらコードを改造していくヒントをご紹介しました。

完璧なコードを一発で目指す必要はありません。まずはAIにたたき台を作ってもらい、それを少しずつ自分の目的に合わせて修正していく。うまくいかなかったら、またAIに相談してみる。そんな風に、AIと二人三脚で試行錯誤しながら進めていくことが、これからの時代、新しい技術と付き合う上での自然な姿なのかもしれません。

Excelマクロには、今回ご紹介した以外にも、もっとたくさんの可能性があります。まずは身近な定型作業を一つ自動化してみて、その威力と面白さを味わってみてください。

そしてその小さな「楽になった!」「面白い」が、次の「これもできるかな?」に繋がっていくはずです。AIという心強いパートナーと一緒に、焦らず、楽しみながら、マクロの世界を探求していきましょう。

皆さんの日々の業務が、AIとマクロの力で、少しでも快適になることを願っています。

それでは、また!

コメント

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