Site cover image

Site icon imageExcelおさるくんのastro-notion-blog

VBA / Python / Notion / AIによる業務効率化とデータサイエンスに関する情報を発信しています!

Post title iconChatGPT でVBAコードを整理!マクロの記録で生成したコードを修正します!

Featured image of the post

🔄 アップデート情報

2024年9月12日よりChatGPTの最新モデルとしてOpenAI o1の提供が開始されました!
  • 高度な推論能力を持つように設計されており、特に科学、数学、コーディングの分野で優れたパフォーマンスを発揮します。
  • 応答前に「思考時間」を取るよう訓練されており、複雑な問題に対してより深い分析が可能です。
  • o1-previewo1-miniの2つのモデルがあります。主な違いを以下の表にまとめました。
特徴o1-previewo1-mini
推論能力より高度o1-previewよりやや劣る
処理速度標準より高速
コスト高いo1-previewの約80%
週間利用制限30メッセージ50メッセージ
最大出力トークン数32,768トークン65,536トークン
主な用途高度な技術開発、
研究プロジェクト
小規模プロジェクト、
基本的な自動化タスク
コーディング能力非常に高いo1-previewと同等
リソース消費多い少ない(軽量)
複雑なタスク処理優れているやや劣る
Image in a image block
🎙️
OpenAI o1とGPT-4oの出力精度の違いを漫才ネタで比較してみました!

Post title icon in a page linkArrow icon of a page linkChatGPTの最新モデルOpenAI o1で漫才ネタを作ってみた!

2024年5月13日よりChatGPTのGPT-4oモデルの提供が開始されました!
  • GPT-4o(オムニ)ではテキスト、音声、画像、映像をシームレスに扱い、自然なテンポでのリアルタイム音声会話が可能になりました。
  • 特に、視覚と音声の理解力が際立ち、多言語対応や複雑な対話の要素を理解できるようになったと言われています。
  • さらに、既存モデルや競合モデルを上回る性能でありながら、制限はありますが、無料ユーザーも利用可能となっています。
Image in a image block

2024年4月1日よりChatGPTがログイン不要で利用できるようになりました!
  • 「まずはお試しください」をクリックすると利用できます。
Image in a image block
Image in a image block
  • 米OpenAIは4月1日、ログインやアカウント作成なしでもChatGPTが利用可能になったと発表しました。
  • これまでは、ChatGPTの利用にはアカウント作成が必須でしたが、今回の更新でアカウントを作成せずにChatGPTを試せるようになりました。ただし、モデルはGPT3.5、過去のチャット履歴の保存や確認、チャットの共有、音声対話やカスタム指示などの追加機能は利用できないようです。
  • 早速試してみましたが、GPT3.5モデルでも十分な精度だと感じました!
試しにマクロの記録をリファクタリングしてみました!
Image in a image block
Image in a image block
Image in a image block

ご質問の中にありました、VBAコードの実行方法について詳しくご説明いたします。
Image in a image block
1. コードを入力するVBE(Visual Basic Editor)の画面を表示する方法
  • まずはコードを入力するVBE(Visual Basic Editor)の画面を表示する方法をご紹介します。
    Image in a image block

  • Excelのツールバーのメニューから「開発」タブを選び、「Visual Basic」をクリックします。
    Image in a image block

  • もし開発タブが表示されていない場合は、リボンの上で右クリック、リボンのユーザー設定を選択します。
    Image in a image block

  • リボンのユーザー設定が選択されていることが確認できたら、「開発」にチェックマークを入れてOKボタンをクリックします。
    Image in a image block

  • また、ショートカットキーで起動することも可能です。Excelが開いている状態で、キーボードのAlt + F11を押すことで、直接VBEを起動することができます。
    Image in a image block
    Image in a image block

2. VBE(Visual Basic Editor)にコードを貼り付ける方法
  • 次にコードの貼り付け方法をご紹介します。
    Image in a image block

  • VBE画面の、左のプロジェクトウィンドウで現在開いているExcelファイルの「VBAProject (現在のファイル名)」を右クリックし、「挿入」→「標準モジュール」を選択します。
    Image in a image block
    Image in a image block

  • キーボードショートカットで挿入する場合はAlt ➜ I ➜ Mで挿入できます。
    Image in a image block

  • 標準モジュールを削除する場合は削除するモジュールを選択し、右クリックからモジュールの解放を選択します。
    Image in a image block
    Image in a image block

  • 「いいえ」を選択することでモジュールを削除することができます。
    Image in a image block

  • 本記事でご紹介したChatGPTで作成したVBAコードを貼り付けます。
    Image in a image block

3. VBAコードの実行方法
  • 最後にコードの実行方法をご紹介します。
    Image in a image block

  • コードを貼り付けたら、エディタの上部にある「実行」ボタン(緑の再生ボタン)をクリックするか、F5キーを押して実行できます。
    Image in a image block

1️⃣ はじめに

  • 今回は、OpenAI(人工知能研究所)が開発した、話題のChatGPTを使用してExcelの機能「マクロの記録」を使って作成したコードを整形する方法を解説していきます。
  • ChatGPTは自然言語処理の人工知能モデルです。ユーザーと会話形式で質問の受け答えができるのが特徴で、プログラミングのコードを生成・変換・修正することも可能です。
  • 前回の動画で紹介した、総務省のデータ表記方法のチェック項目に従って修正するVBAコードを使用します。

  • それでは早速、動画で生成方法を確認していきましょう!

2️⃣ マクロの記録でVBAコードの生成

📖
ChatGPTとは?

OpenAIという人工知能研究所が開発した自然言語処理の人工知能生成AIです。

Image in a image block

  • 使用するコードは、以前の動画で紹介した総務省のデータ表記方法のチェック項目に従って作成したものをベースに実装していきます。データはこちらからダウンロード可能です。

  • 左上が修正前シートです。左下の修正後シートに転記処理を行います。こちらは同じExcelブックの別シートを整列表示させています。
  • 右側にはVBE(VBAのコードエディター)を開いています。
    Image in a image block

  • 今回はExcelに備わっているマクロの記録を使用してコードを生成していきます。マクロの記録は、「マクロの記録」ボタンを押してから「記録終了」ボタンを押すまでの、Excelでの作業内容が自動的にマクロ化される機能です。操作した内容がリアルタイムでコードとして生成されていきます。
    Image in a image block

  • ただし、マクロの記録では不要なコードも多く記録されてしまい、処理の内容を人が理解するのは大変です。また、生成されたコードをそのまま使用するだけでは、柔軟なマクロを作ることができないため整形が必要です。
    Image in a image block

  • 今回はこの整形・リファクタリングChatGPTを使用して行いたいと思います。
    📖
    コードのリファクタリングとは?

    プログラムの外部動作を変更せずに、不要なコードの削除、重複コードの統合、内部の構造や実装を改善するプロセスのことです。この目的は、コードの可読性を高め、保守性を向上させ、将来の変更や拡張を容易にすることにあります。

    graph TD
        A[コードのレビュー] -->|問題を識別| B[リファクタリングの計画]
        B --> C{リファクタリングを実施}
        C -->|はい| D[コードの改善]
        D --> E[テストの実行]
        E --> F{テスト成功?}
        F -->|はい| G[変更をコミット]
        G --> H[リファクタリング完了]
        F -->|いいえ| I[バグ修正]
        I --> E
        C -->|いいえ| J[他のタスクへ]

  • まずはマクロの記録でコードを自動生成していきます。
    Image in a image block

  • マクロの記録はワークシートの左下枠外にある記録ボタンでスタート、ストップすることができます。
    Image in a image block

  • 記録する内容は下記のとおりです。
    1. 最初に修正前シートの表のデータをコピーし修正後シートに貼り付けます。
    2. 次に値に余計な空白が含まれているため「ctrl+H」で置換を使って空文字に置き換えます。
    3. 最後に数値部分に「ctrl+shift+1」3桁区切りのカンマを設定します。
    graph TD
        A[修正前シートのデータをコピー] --> B[修正後シートに貼り付け]
        B --> C[ctrl+H で空白を空文字に置換]
        C --> D[数値部分に ctrl+shift+1 でカンマ設定]

  • これでマクロ記録によるコードが完成いたしました。
Image in a image block

3️⃣ ChatGPTでVBAコードをリファクタリング

  • 完成したコードをChatGPTを使って整形していきます。マクロの記録で作成したVBAコードを整形する指示と、コードを貼り付けていきます。
🪄
「以下のVBAコードを整形してください。」
Image in a image block

  • コードが整形されました。
Image in a image block

  • ChatGPTでは回答に対して、さらに深掘りすることや、求める回答になるまで対話を重ねることもできます。生成されたすべてのコードをコードブロックの中に記述するように指示をします。
🪄
「上記のコードをすべてコードブロックとして記述してください」
Image in a image block

  • 続いて、コードの中で使用していない不要な引数を取り除きます。
🪄
「上記のコードから不要な引数を取り除いてください。
Image in a image block
  • コードのリファクタリングが完了しました。

4️⃣ VBAコードの実行

  • リファクタリングしたVBAコードが問題なく実行出来るか確認していきます。
Image in a image block

  • 右上がマクロの記録で作成したコードです。
Image in a image block

  • 右下がChatGPTを使って修正したコードです。
Image in a image block

  • プロシージャ名とシート名を変更します。

    プロシージャ名:example_4() → example_4_chatgpt()

    シート名:Sheet1 → 修正後4

Image in a image block

  • コードが完成しました。ステップ実行で確認していきます。F8キーを押すごとに1行ずつコードが実行されます。
Image in a image block

  • 転記処理が完了しました。
Image in a image block

マクロの記録で生成したコード
Option Explicit

Sub example_4()
    Range("C4").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("総務省.xlsm").Activate
    Range("C4").Select
    ActiveSheet.Paste
    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    Application.CutCopyMode = False
    Selection.NumberFormatLocal = "#,##0"
End Sub
ChatGPTでリファクタリングしたコード
Option Explicit

Sub example_4_chatgpt()
    With ThisWorkbook.Worksheets("修正前4")
        .Range("C4", .Range("C4").End(xlToRight).End(xlDown)).Copy
    End With
    
    With Workbooks("総務省.xlsm").Worksheets("修正後4")
        .Range("C4").PasteSpecial xlPasteValues
        .Range("C4", .Range("C4").End(xlToRight).End(xlDown)).Replace What:=" ", Replacement:="", _
            LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
        .Range("C4", .Range("C4").End(xlToRight).End(xlDown)).NumberFormatLocal = "#,##0"
    End With
    Application.CutCopyMode = False
End Sub

5️⃣ おわりに

  • 最後までご覧いただきありがとうございました!
  • マクロの記録は初学者にとってコードを簡単に生成できて便利な機能ですが、コードが読みづらいことが難点でした。ChatGPTの力を借りてリファクタリングすることで保守性の高いコードに生まれ変わります!ぜひ日々の業務にお役立てください!
  • またTwitterでもVBA、Pythonに関するアウトプットをしていますので、概要欄からフォローいただけますと幸いです。