ChatGPTやCopilotで、VBAを学ばなくてもExcel自動化実現

  • ブックマーク
  • Feedly
  • -
    コピー
ChatGPTやCopilotで、VBAを学ばなくてもExcel自動化実現

せるワザ

結果を出してサクッと帰る 神速時短』(ヴィランティ 牧野祝子 著)という書籍によれば、日本の職場が”時間漬け”なのに成果を伴わない、生産性が上がらない理由の1つに、「1人で悩んでいる時間が多すぎる」ことがあります。

しかし、生成AIを仕事にうまく活用できているあなたなら、悩む時間も短くなっているでしょうし、同僚にくらべて生産性が高く、サクッと帰れる習慣がついていることでしょうね。

今回のテーマは、「Excelマクロ自動化をCopilotに相談してみた」です。

VBA or PAD?ではなく、AI & VBA or PAD

Excel業務自動化の手段として、以前から利用されていたのが、VBAを使ったプログラミングです。

しかし、他言語よりは習いやすいものの、やはり多くのルールや文法を的確にエディタで記述できるよう訓練しなければならず、プログラミング初心者にとって多少ハードルが高い業務改善手法でした。

「自動化プログラムを組むための学習時間」と、「自動化せず、時間をかけてでも根性で乗り切ってしまう」のとどっちが得か? を考え、結局後者で乗り切ってしまった経験があるビジネス・パーソンも多いのではないでしょうか?

そこで、プログラミング学習をしなくても、”ノーコード”(あるいはローコード)で業務自動化を進められるツールとして注目を集めたのが、Windows 10以降で無償提供されるようになったPower Automate Desktop(PAD)です。

VBAがOffice製品に依存していて、それ以外のアプリケーション連携にあまり向いていないのに対して、PADは、PC内作業ばかりでなく、Webアプリケーションも自動化できる400種類以上のアクションを備えています。

PADの場合、プログラミング言語を学習する必要もなく、直感的に操作できるアクションの組み合わせで、自動化フローを簡単に組み上げられます。

しかし、スケジュール自動実行が有料版でしか使えなかったり、Windows 10より前のOSやレガシーExcelでは自動化できない場合があったり、制約があることも事実です。

そこで、もしプログラム記述に不安が残るのであれば、「VBAか、PADか?」ではなく、「生成AI+VBAか、PADか?」の二択で、自動化検討を進めるのがよいのではないでしょうか?

つまり、これまでExcel自動化のために手入力していたプログラムを、AIに自動生成してもらうのです。

Copilotに、自動PDF化マクロと書式自動設定マクロを書いてもらいました

2022年12月のChatGPT一般公開化以降、Copilot、Gemini、NotionAIなど、さまざまな生成AIツールがリリースされましたので、どのツールを使っても、回答誤り(*)がなければ、似たような成果を得られます。

2024年時点では、生成AIの「回答誤り」は日常茶飯事であり、検索後に必ずユーザー自身が事実確認(ファクトチェック)をする必要があります。

ただし、今回はMicrosoft Excelの自動化に関する相談なので、おそらく最も正しい製品情報をもっているだろうと推測されるMicrosoft社のCopilotに質問を投げかけてみました。

タスクとしては、 (1)データが入力された1枚のワークシート、

ChatGPTやCopilotで、VBAを学ばなくてもExcel自動化実現

これを一発でPDF化するVBAプログラムの取得。

さらに、

(2)この資料を見やすくするため、隔行ごとにセルを塗りつぶすVBAプログラムの取得、

の2点です。

ChatGPTやCopilotで、VBAを学ばなくてもExcel自動化実現

まず、(1)について、Copilotに次のような相談(プロンプト;指示・命令)を投げかけてみました。

「Microsoft ExcelのVBEへそのままペーストできるように、「現在表示しているワークシートをPDF出力し、同じフォルダ内に名前をつけて保存する」VBAコードを書いてください。」

ChatGPTやCopilotで、VBAを学ばなくてもExcel自動化実現

Copilotからの回答がこちら。

ChatGPTやCopilotで、VBAを学ばなくてもExcel自動化実現

「もちろんです。以下に、現在表示しているワークシートをPDFとして出力し、同じフォルダ内に名前をつけて保存するためのVBAコードを示します。このコードをExcelのVBEにペーストしてください。
Sub SaveWorksheetAsPDF()
    Dim ws As Worksheet
    Dim savePath As String
    ' 現在アクティブなワークシートを設定
    Set ws = ActiveSheet
    ' 保存先のパスを設定(ワークシートと同じフォルダに保存)
    savePath = ws.Parent.Path & "\" & ws.Name & ".pdf"
    ' PDFとしてエクスポート
    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=savePath, Quality:=xlQualityStandard
    ' 確認メッセージ
    MsgBox "PDFが保存されました: " & savePath
End Sub
このコードは、現在アクティブなワークシートをPDFファイルとしてエクスポートし、ワークシートが存在する同じフォルダに保存します。保存が完了すると、メッセージボックスで保存先のパスが表示されます。ご利用の際は、VBEでこのマクロを実行する前に、マクロが有効になっていることを確認してください。どうぞお試しください!」

本記事では、このVBAコードの意味に関する解説は、一切行いません。

ただ、このCopilot回答のテキストエディタ部分に紹介されたプログラムをコピーし、マクロ有効ブック(.xlsm)のVBEにペーストするだけで、このプログラムが正常に機能し、目的の成果物を正しく得られたことが確認できました。

ChatGPTやCopilotで、VBAを学ばなくてもExcel自動化実現

(2)次に、Copilotへ、以下の相談(プロンプト;指示・命令)を投げかけてみました。

「Microsoft ExcelのVBEへそのままペーストできるように、「現在表示しているワークシートにAからⅮ列まで、1から48行目までのセルに統計数値が入っています。この表を見やすくするために、奇数行4列分のセルへ薄オレンジ色の塗りつぶしをさせる」VBAコードを書いてください。」

Copilotからの回答がこちら。

「もちろんです。以下に、指定された条件に基づいてExcel VBAコードを記述します。このコードは、現在アクティブなワークシートのAからD列、1から48行目までのセルに対して、奇数行のセルを薄オレンジ色で塗りつぶします。
Sub ColorOddRows()
    Dim rng As Range
    Dim row As Range
    Dim cell As Range
    ' A1:D48の範囲を設定
    Set rng = ThisWorkbook.ActiveSheet.Range("A1:D48")
    ' 各行に対してループ
    For Each row In rng.Rows
        ' 奇数行の場合
        If row.Row Mod 2 = 1 Then
            ' 各セルに対してループ
            For Each cell In row.Cells
                ' セルの背景色を薄オレンジ色に設定
                cell.Interior.Color = RGB(255, 200, 100)
            Next cell
        End If
    Next row
End Sub
このコードをVBEにコピーして貼り付け、実行すると、指定された範囲の奇数行が薄オレンジ色になります。ご確認ください。よろしければ、他にもご質問がありましたらお知らせください。よろしくお願いいたします。😊」

こちらも、何の問題もなく作動し、目的の成果物が得られました。

ChatGPTやCopilotで、VBAを学ばなくてもExcel自動化実現

(2)-2 最後に、Copilotへ、追加の要求を投げかけてみました。

「ありがとうございます。ちゃんとExcel VBEにコピーしたら目的の操作が実行されました。ちなみに、このプログラムでは、最初からデータが4列48行とわかっていましたが、次に列数、行数があらかじめ分からない前提で、データの最終列、最終行を見つけ出すプログラムを、このコードに付け足していただけますか?」

1回やりとりした生成AIとの会話に対して、それを深ぼりする追加プロンプトを投げかけることで、プログラムの内容はより高度に、得られる成果物の内容はさらに精度の高いものへと進化させられます。

「もちろんです。以下のコードは、現在アクティブなワークシートの最終行と最終列を見つけ出し、その範囲内の奇数行を薄オレンジ色で塗りつぶします。
Sub ColorOddRows()
    Dim rng As Range
    Dim row As Range
    Dim cell As Range
    Dim lastRow As Long
    Dim lastColumn As Long
    ' 最終行と最終列を見つける
    lastRow = ThisWorkbook.ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lastColumn = ThisWorkbook.ActiveSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    ' 最終行と最終列までの範囲を設定
    Set rng = ThisWorkbook.ActiveSheet.Range("A1:" & Cells(lastRow, lastColumn).Address)
    ' 各行に対してループ
    For Each row In rng.Rows
        ' 奇数行の場合
        If row.Row Mod 2 = 1 Then
            ' 各セルに対してループ
            For Each cell In row.Cells
                ' セルの背景色を薄オレンジ色に設定
                cell.Interior.Color = RGB(255, 200, 100)
            Next cell
        End If
    Next row
End Sub
このコードをVBEにコピーして貼り付け、実行すると、指定された範囲の奇数行が薄オレンジ色になります。ご確認ください。他にもご質問がありましたらお知らせください。よろしくお願いいたします。😊」 

先の(2)プログラムが変更され、VBAマクロで定番の「データが入ったセルの最終行と最終列を見つける」コード(赤文字)が得られました。

習うより使い慣れよ!VBAを勉強する時間があったら、Copilotに自動生成させて自分はサクッと帰りましょう!

せるワザではかつて、VBA初学者が難解なプログラミング言語を習得するために、「マクロの自動記録」を”写経”するのも効果的、とお伝えしたことがあります。

これも、伝統的なプログラミング言語学習法ですが、もはや”生成AI前”のレガシー学習法であることは否めません。

細かな文法を習うより先に、本当に動くプログラムを無料、自動でゲットし、そのコードを読み込んでから、さらに高度なプログラムを書けるように練習を続けるのが、”生成AI後”の効果的な学習法だと言えるでしょう。

とはいえ、あまり生成AIとの対話にのめり込み過ぎないように気をつけてくださいね。

とくに、業務外の”人生相談”的なAIとの対話は危険です。

ベルギーでは、生成AIに恋して、自殺してしまった人もいるくらいですから。

(cf. 生成AIと会話を続けた夫は帰らぬ人に(NHK))

CopilotやChatGPTへの相談ごとは、あくまでも業務改善のシンプルな内容にとどめ、職場はサクッと退出しちゃいましょう。

せるワザ

そして、人生の機微にまつわる相談事は、家族なり、恋人、友人、知人なり、やっぱり生身の知り合いに投げかけるのが吉(!?)のようですね。









小さなお悩みでも、
お気軽にご相談ください!

お急ぎの方はお電話にてお問い合わせください

050-6867-2130
せるワザロゴ

セルワザでは、役に立つEXCELワザをご紹介しております!

  • ブックマーク
  • Feedly
  • -
    コピー