Excelに「GPT-4 Turbo」モデルの回答を出力する方法!VBAでAPI連携!

Excelに「GPT-4 Turbo」モデルの回答を出力する方法!VBAでAPI連携!

ExcelにChatGPTの「GPT-4 Turbo」モデルで回答を出力したいときはないでしょうか。

けど、そんな中で悩むことは、

・ExcelにChatGPTの「GPT-4 Turbo」モデルで回答を出力したいが方法がよくわからない
・Excel VBAを使いChatGPT APIと連携する方法が知りたいがどこにもない

ですよね。

今回はそんなお悩みを解決する

・ExcelにChatGPTの「GPT-4 Turbo」モデルで回答を出力する方法
・Excel VBAを使いChatGPT「GPT-4 Turbo」モデルのAPIと連携する方法

についてまとめます!

ExcelにChatGPTの「GPT-4 Turbo」モデルで回答を出力するイメージ

ExcelにChatGPTの回答を出力するイメージについて説明をします。

まず、Excelを用意します。

B1セルに質問内容を入れ、マクロを実行すると、ChatGPTが呼び出され、その結果をB3セル以降に出力していきます。

これまでの「GPT-4」モデルより高機能かつ料金が安くなっているので良いですね!

それでは早速実装して、使ってみましょう。

ChatGPTの「GPT-4 Turbo」モデルについて

「GPT-4 Turbo」は、OpenAIが提供するChatGPTの高速化されたバージョンです。
このモデルは、従来のGPT-4モデルの機能と性能を維持しつつ、応答速度を向上させています。

また「GPT-4 Turbo」は、従来のGPT-4の使用料が入力・出力トークン安くなり、トレーニングデータは2023年4月までを参照するようになりました。

タカヒロ
タカヒロ
早くて、性能よく、情報も新しくなってより利用しやすくなりましたね!

ExcelにChatGPTの「GPT-4 Turbo」モデルで回答を出力する方法

ChatGPT連携元のExcelファイルを用意

まずは、ChatGPTの連携元となるExcelファイルを用意しましょう。

B1セルに質問内容を入れる枠を用意します。

ChatGPTの結果はB3セル以降に出力していきます。

タカヒロ
タカヒロ
アイコンなど添えるとかっこよくなりますので、好みでいれてみてください。

ChatGPTのAPIキーを取得

今回使うChatGPTのAPIキーを取得しましょう。

API keys発行ページへアクセスします。

タカヒロ
タカヒロ
初回ログインの場合はアカウントを登録してください。

「Create new secret key」をクリックし、出力されたAPIキーをメモします。

タカヒロ
タカヒロ
発行されたAPIキーは画面を閉じた後は見られなくなりますので、しっかり記録するようにしましょう。また、外部に漏れないよう注意しましょう。

ChatGPTのAPIを使う上での注意点

ChatGPTのAPIを使う上での注意点を先にお伝えします。

ChatGPTのAPIは利用していくと料金が発生する仕組みになっています。ですので、発行したAPIを数多く使ったり、第三者に共有し、不特定多数の人達に利用されたりすると知らぬ間に費用が多額になってしまっている可能性がありますので、十分注意してください。

ただ、初回登録時は18ドルの無料枠がありますので、それを超えない分量であれば料金は発生することはありません。

今どれぐらい使っているかを確認する方法はUsageページから確認することができますので、随時確認するようにしましょう。

ChatGPT APIと連携するサンプルVBAコード

ChatGPT APIと連携するVBAコードは以下の通りです。

Sub 質問をChatGPTのAPIへ送る_GPT4Turbo()

    ' JSONパーサーを導入しMicrosoft Scripting Runtimeを参照に追加する必要があります

    Dim objhttp As Object
    Dim APIKey As String
    Dim strTextToPredict As String
    Dim strRequestBody As String
    Dim strResponse As String
    Dim strModel As String
    Dim strMessages As String
    Dim apiUrl As String
    Dim jsonResponse As Dictionary

    APIKey = "sk-****************************************************" ' 実際のAPIキーに置き換えてください

    ' モデル名を指定してください
    strModel = "gpt-4-1106-preview"


    ' 入力セルからテキストを取得し、改行を処理します
    strTextToPredict = Replace(Sheets(1).Range("B1").Text, Chr(10), "\n")

    ' JSON配列メッセージを準備します

    strMessages = "[{""role"": ""user"", ""content"":""" & strTextToPredict & """}]"

    ' APIのURLを設定します
    apiUrl = "https://api.openai.com/v1/chat/completions"

    ' HTTPリクエストオブジェクトを初期化します
    Set objhttp = CreateObject("MSXML2.XMLHTTP")
    With objhttp
        .Open "POST", apiUrl, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Authorization", "Bearer " & APIKey
        strRequestBody = "{""model"":""" & strModel & """, ""messages"":" & strMessages & "}"
        .send strRequestBody

        ' レスポンスが成功したかどうかを確認します
        If .Status = 200 Then
            strResponse = .responseText
        Else
            MsgBox "エラー: " & .Status & " - " & .statusText
            Exit Sub
        End If
    End With

    Debug.Print strResponse

    ' JSONレスポンスをパースします。
    ' JSONパース用のライブラリが必要です。
    Set jsonResponse = JsonConverter.ParseJson(strResponse)

    ' レスポンスに含まれる配列からメッセージ部分を出力します。
    If jsonResponse("choices")(1)("message")("role") = "assistant" Then
        Sheets(1).Range("B3").Value = jsonResponse("choices")(1)("message")("content")
    End If

End Sub

VBAを設定する

VBAを設定していきましょう。

先ほどメモしたAPIキーを入力します。

APIKey = "sk-****************************************************"

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

JSONパース用のライブラリの実装

VBAでJsonConverterを使用するには、VBA-JSONというライブラリをインストールする必要があり、
以下の手順で実装していきます。

タカヒロ
タカヒロ
実装手順は少し複雑ですが、一度実装してしまえばそのあとの操作は不要ですので、がんばってみてください。

GitHubからVBA-JSONをダウンロード

VBA-JSONのGitHubリポジトリにアクセスします。
「Code」ボタンをクリックし、「Download ZIP」を選択して、プロジェクトをダウンロードします。

ダウンロードしたZIPファイルを解凍

ダウンロードしたZIPファイルを解凍し、中のファイルを確認します。

JsonConverterをインポート

Excelを開き、VBAエディタ(Alt + F11)を開きます。
プロジェクトエクスプローラーで、VBAプロジェクトを選択します。

「ファイル」メニューから「ファイルのインポート」を選択し、

解凍したフォルダから「JsonConverter.bas」ファイルを選択してインポートします。

インポートされると、JsonConverterオブジェクトがリスト一覧に表示されます。

参照設定を追加

VBAエディタの「ツール」メニューから「参照設定…」を選択します。
「参照可能なライブラリ」リストで、「Microsoft Scripting Runtime」を探し、チェックボックスをオンにして「OK」ボタンをクリックします。

これでVBAプロジェクトでJsonConverterを使用することができます!

ボタンを配置する

マクロをボタンから実行できるようにしていきましょう。

まずはリボンメニューの「開発」タブを選択し「挿入」>「フォームコントロール」>「ボタン」をクリックしボタンを配置します。

任意の名前に表示名を変更し、右クリック>「マクロの登録」から上記サンプルコードのマクロ名を指定します。

VBAからChatGPTを実行する

アメリカ合衆国の歴代大統領をきいてみる

まずはかんたんなアメリカ合衆国の歴代大統領をきいてみましょう。

質問内容はこちらです。

アメリカ合衆国の歴代大統領を在籍年付きで教えてください。

大統領名の他に年号も含めるよう質問してみました。

結果です。

はい、しっかり回答ができていますね!
情報も2023年時点が表示されていますので「GPT-4 Turbo」モデルからの回答で間違いなさそうです!!

 

ChatGPT「GPT-4 Turbo」モデルのAPIと連携するVBAコードの説明

ChatGPT APIと連携するVBAコードについて説明をします。
「GPT-4 Turbo」モデルを指定します。

strModel = "gpt-4-1106-preview"

ChatGPTへの質問内容を取得しさらに改行コードを変換します。

strTextToPredict = Replace(Sheets(1).Range("B1").Text, Chr(10), "\n")

HTTPリクエストオブジェクトを初期化します。

Set objhttp = CreateObject("MSXML2.XMLHTTP")

リクエストのヘッダーを設定します。

.Open "POST", apiUrl, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & APIKey

リクエスト文を作成します。

strRequestBody = "{""model"":""" & strModel & """, ""messages"":" & strMessages & "}"

リクエストを送信します。

.send strRequestBody

レスポンスが成功したかどうかを確認します。ステータスが200であれば成功とみなします。

If .Status = 200 Then
strResponse = .responseText
Else
MsgBox "エラー: " & .Status & " - " & .statusText
Exit Sub
End If

レスポンス情報をデバッグします。不要であれば削除してください。

Debug.Print .responseText

JSONレスポンスをパースします。

Set jsonResponse = JsonConverter.ParseJson(strResponse)

レスポンスに含まれる配列からメッセージ部分を出力するため、”assistant”である場合の条件を設定します。

If jsonResponse("choices")(1)("message")("role") = "assistant" Then
End If

回答である”assistant”の”content”の内容をセルに出力します。

Sheets(1).Range("B3").Value = jsonResponse("choices")(1)("message")("content")

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

PowershellでかんたんにChatGPT-4 Turboを動かす方法

PowershellでかんたんにChatGPT-4 Turboを動かす方法もまとめています。
とりあえず気楽にコマンドラインで「GPT-4 Turbo」を動かしてみたい方におすすめです!

PythonでChatGPTの回答をExcelへ出力する方法

PythonでChatGPTの回答をExcelへ出力する方法について別記事にまとめました。
実はこちらの方がコードが短く済みます。
どうぞご参考ください。

さいごに

いかがでしょうか。

今回は、

・ExcelにChatGPTの「GPT-4 Turbo」モデルで回答を出力する方法
・Excel VBAを使いChatGPT「GPT-4 Turbo」モデルのAPIと連携する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。







4 件のコメント

  • こんにちは。
    ChatGPTに「このURLから不具合に関する記事を要約してください https://learn.microsoft.com/ja-jp/windows/release-health/status-windows-11-24h2」を要求したいと思います。
    ChatGPTのサイトで入力するときちんと回答がくるのですが、こちらのVBA+APIを使うと「すみませんが、私はインターネットにアクセスできないため、指定されたURLを直接参照することができません」と回答が来ます。
    何か良い方法はないでしょうか。

    • いつもご利用ありがとうございます。
      指定されたURLを直接参照することができない件ですが、
      VBA+APIを利用してChatGPTにURLを渡して要約させる場合、
      API自体が直接Webページにアクセスする機能を持たないため、
      正しい挙動となります。
      ほかの方法としては、一旦対象URLをスクレイピングで情報収集して、その後質問文とマージしてGPTに送信する方法がかんたんでよいかと思いますのでご参考ください。

      以下スクレイピングのサンプルコードです。
      Sub GetWebPageContent()
      Dim http As Object
      Dim URL As String
      Dim HTMLContent As String

      URL = “https://learn.microsoft.com/ja-jp/windows/release-health/status-windows-11-24h2”
      Set http = CreateObject(“MSXML2.XMLHTTP”)

      http.Open “GET”, URL, False
      http.Send
      If http.Status = 200 Then
      HTMLContent = http.responseText
      Debug.Print HTMLContent
      Else
      MsgBox “Failed to retrieve the page.”
      End If
      End Sub

  • ご指示の通り作業したところ「エラー404」と出てしまいます。対応ご教示いただけますでしょうか?

    • いつもご利用ありがとうございます。

      404エラーは、存在しないページへアクセスしたときのエラーコードですので、
      今回リクエスト対象となる、以下アドレスが正しく設定されているか、また有効なAPIキーを指定しているかご確認いただけますでしょうか。
      https://api.openai.com/v1/chat/completions

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA ImageChange Image