VBAからOpenAI APIにアクセスするには、HTTPリクエストを手動で構築する必要があります。その中心になるのが JSON形式のリクエストボディ です。ここでは、主に chat/completions エンドポイントを使う場合のJSONの構造について詳しく解説します。
目次
VBA openaAI のJSON形式のリクエストボディの詳細を解説。
🔸 基本のリクエスト構造(chat/completions)
{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "こんにちは!"}
],
"temperature": 0.7
}
🔍 各項目の詳細
🧠 "model"
- 使用するAIモデルを指定します。
- 例:
"gpt-3.5-turbo","gpt-4"など。 - 必須項目
💬 "messages"
- 会話の履歴を含む配列です。
- 各要素は以下の3つのキーを持つオブジェクトです:
| キー | 説明 |
|---|---|
role | system / user / assistant のいずれか |
content | 発言内容 |
name | 任意。ユーザー名など(使わないことが多い) |
例:
[
{"role": "system", "content": "You are a translator."},
{"role": "user", "content": "Translate this into French: Hello."}
]
🔥 "temperature"(省略可)
- 応答のランダム性を制御(0~2)
- 低い値(例:0.2)→ 確定的・論理的
- 高い値(例:1.0)→ 創造的・自由な応答
VBAで使う場合の構造(サンプル)
以下はVBAでJSONを組み立てる例:
Dim json As String
json = "{""model"":""gpt-3.5-turbo""," & _
"""messages"":[ " & _
"{""role"":""user"",""content"":""こんにちは!""} " & _
"],""temperature"":0.7}"
※ " を JSON 内で使うには "" のように2重にする必要があります(VBAの仕様)。
🧰 ヘッダー例(VBAで使う時)
httpReq.setRequestHeader "Content-Type", "application/json" httpReq.setRequestHeader "Authorization", "Bearer YOUR_API_KEY"
✅ まとめ
| 項目 | 必須 | 説明 |
|---|---|---|
| model | ✅ | 使用するGPTのバージョン |
| messages | ✅ | 会話履歴(JSON配列) |
| temperature | ❌ | 応答の多様性を調整 |
実行サンプル
実行するプロシジャー
Sub getOpenAI()
Dim res As String, prompt As String, sMassage As String
'リクエストの関数呼び出し
sMessage = "あなたはVBAプログラマです,"
sPrompt = "VBA OpenAIの検索結果をファイルに保存するコードを書いて下さい"
res = GetChatGPTResponse(sMessage, sPrompt)
'テスト用出力
Debug.Print res
'ファイルに保存
Call saveToFile(res)
'シートに出力
Call toSheet(res)
End Sub
OpenAIのリクエスト関数
Function GetChatGPTResponse(sMessage As String, sPrompt As String) As String
Dim http As Object
Dim json As Object
Dim apiKey As String
Dim url As String
Dim data As String
Dim response As String
' API キーを設定(取得したキーを入れてください)
apiKey = "you-key"
' OpenAIのエンドポイント
url = "https://api.openai.com/v1/chat/completions"
' JSON データの作成
data = "{""model"":""gpt-3.5-turbo""," & _
"""messages"":[ " & _
"{""role"":""system"",""content"":""" & Replace(sMessage, """", "\""") & """}," & _
"{""role"":""user"",""content"":""" & Replace(sPrompt, """", "\""") & """}" & _
"],""temperature"":0.7}"
' HTTPリクエストを作成
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "POST", url, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & apiKey
.Send data
response = .responseText
End With
' JSON を解析して応答を取得
Set json = JsonConverter.ParseJson(response)
GetChatGPTResponse = json("choices")(1)("message")("content")
' クリーンアップ
Set http = Nothing
Set json = Nothing
End Function
ファイルに出力
Sub saveToFile(s As String)
Dim filePath As String
Dim fileNo As Integer
' ファイルパスの指定
filePath = CurDir & "\output_write.txt"
' ファイルナンバーの取得
fileNo = FreeFile
' ファイルを開く(または新しく作成)
Open filePath For Output As #fileNo
' ファイルにデータを書き込む
Write #fileNo, s
' ファイルを閉じる
Close #fileNo
End Sub
シートに出力
Sub toSheet(s As String)
Dim ws As Worksheet
Set ws = Worksheets("sheet1")
' 改行で分割
Lines = Split(s, vbCrLf)
' シートに1行ずつ書き込む(A列に)
For i = 0 To UBound(Lines)
ws.Cells(i + 1, 1).Value = Lines(i)
Next i
End Sub
必要であれば、VBAで実際にOpenAI APIにPOSTする完全なコード例も提供できますよ。興味ありますか?
