ExcelにChatGPTの「GPT-4 Turbo」モデルで回答を出力したいときはないでしょうか。
けど、そんな中で悩むことは、
・Excel VBAを使いChatGPT APIと連携する方法が知りたいがどこにもない
ですよね。
今回はそんなお悩みを解決する
・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キーをメモします。
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 VBAを使いChatGPT「GPT-4 Turbo」モデルのAPIと連携する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
こんにちは。
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