スポンサーリンク

【Azure OpenAI Service】EXCEL VBAからAPI呼び出し

記事内に広告が含まれています。

EXCEL VBAからAzure OpenAI ServiceのAPIを呼びだすサンプルコードを紹介します。

スポンサーリンク

事前準備

VBA-JSONのインストール

VBAでJSONを解析する、VBA-JSONというライブラリを使用します。

以下の手順でインポートします。

  1. VBA-JSON のページにアクセスし、「Code」ボタンをクリックし、「Download ZIP」を選択してファイルをダウンロードします。
  2. ZIPファイルを解凍し、JsonConverter.basファイルを取得します。
  3. ExcelのVBAエディタを開き、「ファイル」メニューから「ファイルのインポート」を選択し、JsonConverter.basファイルをインポートします。

参照設定の追加

VBA-JSONライブラリで使用されている Dictionary 型を使えるようにするため、以下の手順で参照設定を追加します。

  1. VBAエディタを開く
    • ExcelでAlt + F11キーを押してVBAエディタを開きます。
  2. 参照設定を開く
    • VBAエディタで、「ツール」メニューをクリックし、「参照設定」を選択します。
  3. Microsoft Scripting Runtimeの参照を追加
    • 「参照設定」ダイアログボックスが開きます。
    • 下にスクロールし、「Microsoft Scripting Runtime」にチェックを入れて、「OK」をクリックします。
スポンサーリンク

サンプルコード

シート上にボタンを配置し、クリックしたらAPIが呼び出されるようにするためのVBAコードを記載します。

最初に呼び出す関数を ButtonClick() として定義しています。

A1セルの内容をプロンプトとしてAzure OpenAI Serviceに送信し、応答がB1セルに表示されるようにしています。

Option Explicit

Sub ButtonClick()
    ' ボタンがクリックされたときに呼び出されるサブルーチン
    Dim prompt As String
    Dim resText As String

    ' セルA1の値をプロンプトとして取得
    prompt = Range("A1").Value
    ' CallGPT関数を呼び出して、プロンプトに対する応答を取得
    resText = CallGPT(prompt)
    
    ' セルB1に応答を設定
    Range("B1").Value = resText

End Sub
    
Function CallGPT(prompt As String) As String
    ' Azure OpenAI ServiceのAPIキー
    Const API_KEY As String = "[YOUR_API_KEY]"
    ' エンドポイントとデプロイ名を入力
    Const API_ENDPOINT As String = "https://[YOUR_ENDPOINT]/openai/deployments/[YOUR_DEPLOYMENT]/chat/completions?api-version=2023-05-15"
    
    Dim maxTokens As Long
    Dim temperature As Double
    Dim httpObj As Object
    Dim dictReq As New Scripting.Dictionary
    Dim messages As New Collection
    Dim requestBody As String
    Dim response As Object

    ' 応答の最大トークン数を設定
    maxTokens = 2000
    ' 応答の温度(創造性の度合い)を設定
    temperature = 0
    
    ' システムメッセージとユーザープロンプトをメッセージリストに追加
    messages.Add Message("system", "You are a helpful personal assistant")
    messages.Add Message("user", prompt)
    
    ' リクエストデータを設定
    dictReq.Add "messages", messages
    dictReq.Add "max_tokens", maxTokens
    dictReq.Add "temperature", temperature
    
    ' リクエストデータをJSON形式に変換
    requestBody = JsonConverter.ConvertToJson(dictReq, 2)
    Debug.Print requestBody
   
    ' HTTPオブジェクトを作成
    Set httpObj = CreateObject("MSXML2.XMLHTTP")

    ' APIリクエストを送信
    httpObj.Open "POST", API_ENDPOINT, False
    httpObj.setRequestHeader "Content-Type", "application/json"
    httpObj.setRequestHeader "api-key", API_KEY
    httpObj.send requestBody
    
    ' APIの応答をデバッグプリント
    Debug.Print httpObj.responseText
    
    ' 応答をJSON形式で解析
    Set response = JsonConverter.ParseJson(httpObj.responseText)
    
    ' 応答に"choices"が含まれている場合、最初の応答メッセージを返す
    If response.Exists("choices") Then
        CallGPT = response("choices")(1)("message")("content")
    Else
        CallGPT = "no response!"
    End If
  
End Function

Function Message(role As String, prompt As String) As Scripting.Dictionary
    ' メッセージの役割と内容を設定する関数
    Set Message = CreateObject("scripting.dictionary")
    Message.Add "role", role
    Message.Add "content", prompt
End Function

[YOUR_API_KEY]、[YOUR_ENDPOINT]、[YOUR_DEPLOYMENT] は、使用するAzure OpenAI Serviceの環境にあわせて変更してください。

AIPバージョン(2023-05-15)も、必要に応じて変更してください。

コマンドボタンの追加

コマンドボタンの追加方法を記載します。

  1. 開発ツールの表示
    • Excelを開きます。
    • メニューの「ファイル」タブをクリックし、「オプション」を選択します。
    • 「Excelのオプション」ウィンドウで「リボンのユーザー設定」を選択し、「開発」タブにチェックを入れます。これでリボンに「開発」タブが表示されます。
  2. コマンドボタンの追加
    • 「開発」タブをクリックします。
    • 「挿入」ボタンをクリックし、フォームコントロールの中から「ボタン(フォームコントロール)」を選択します。
    • シート上の任意の場所をクリックしてドラッグし、ボタンを配置します。
  3. ボタンのプロパティ設定
    • ボタンを配置すると、「マクロの登録」ダイアログボックスが表示されます。
    • サンプルコードで作成した、ButtonClickを選択し「OK」をクリックします。

おわりに

EXCELで行われている業務にGPTを適用するには、EXCEL VBAでのAPI呼び出しが便利です。

スポンサーリンク
スポンサーリンク
AzureGenerative AIWindows
著者SNS
タイトルとURLをコピーしました