【わちょんのゆっくりIT】【Excel】VBAでChatGPT(GPT-API)と連携する方法を割と詳しく解説



わちょんのゆっくりIT :【Excel】VBAでChatGPT(GPT-API)と連携する方法を割と詳しく解説

【Excel】VBAでChatGPT(GPT-API)と連携する方法を割と詳しく解説

VBAを使ってExcelをChatGPT風にする方法と、そのメリットについて解説します。
Copilotが来たらこんなもん不要になるのかもしれませんが、おそらくバージョンの互換性や使用料金の問題でまだまだ浸透に時間はかかると思うので。

※動画で触れてませんでしたが、チャットモードやプラグインと連携したい場合は大人しくpythonを使うのがいいと思います。

【動画内で紹介したExcel】
https://drive.google.com/file/d/1s8I8Hxm7eAmW7QSpLCi4RIK9Vvfv-kQf/

【目次】
0:00 冒頭
解説編
1:10 ExcelでChatGPT(GPT-API)が使えるメリット
3:49 注意点
実践編
4:56 Excel立ち上げ→マクロの登録
6:28 APIキーを入力するセルを設定
7:56 プロンプト、パラメータなどのセルを設定
10:23 マクロの登録+実行方法!
12:14 困った時は

【コード】
Option Explicit
Const API_URL As String = “https://api.openai.com/v1/chat/completions”

Sub ApplyAddressCorrection()
Dim apiKey As String
Dim temperature As Double
Dim text As String
Dim response As String
Dim responseArray() As String
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
ws.Range(“B5”).CurrentRegion.ClearContents
apiKey = Range(“API”).Value
temperature = ws.Range(“D3”).Value
text = ws.Range(“B2”).Value & ws.Range(“B3”).Value
text = “{“”model””: “”gpt-3.5-turbo””, “”temperature””: ” & temperature & “, “”max_tokens””: 2000″ & “, “”messages””: [{“”role””: “”user””, “”content””: “”” & text & “””}]}”
response = sendAPIRequest(API_URL, text, apiKey)
ws.Range(“B5”).Value = extractContent(response)
response = extractContent(response)
response = Replace(response, “n”, vbLf)
If ws.Range(“D5”).Value = “する” Then response = Replace(response, “。”, “。” & vbLf)
responseArray = Split(response, vbLf)
For i = 0 To UBound(responseArray)
ws.Range(“B” & 5 + i).Value = responseArray(i)
Next i
End Sub

Function sendAPIRequest(url As String, text As String, apiKey As String) As String
Dim request As Object
Set request = CreateObject(“MSXML2.XMLHTTP”)
request.Open “POST”, url, False
request.setRequestHeader “Content-Type”, “application/json”
request.setRequestHeader “Authorization”, “Bearer ” & apiKey
request.send text
sendAPIRequest = request.responseText
End Function

Function extractContent(response As String) As String
Dim startPos As Integer
Dim endPos As Integer
startPos = InStr(1, response, “””content””: “””) + 12 ‘VBAでjsonの扱いが困難のため特定の文字列をキーとしている
endPos = InStr(startPos, response, “”””)
extractContent = Mid(response, startPos, endPos – startPos)
End Function

【関連】
VBAの超基礎的なところを知りたい方はこちら↓
【初心者向け】バルスで学ぶVBAの基礎
https://youtu.be/MoeeGu4VIgA

プロンプトって何?temperatureって何?って方はこちら↓
【大注目スキル】「プロンプトエンジニアリング」の基礎について、”Prompt Engineering Guide”に沿って少し真面目に解説します。
https://youtu.be/6DCig_l9UA0

【ChatGPT-Plus】
https://openai.com/blog/chatgpt-plus/

【ChatGPT】
https://openai.com/blog/chatgpt/

<Twitter>
わちょん
https://twitter.com/wachi_yukkuri

<チャンネル紹介>
ExcelやVBA中心。時には真剣に、時には楽しく【ゆっくり動画】を作っています
https://www.youtube.com/channel/UCc1sntWEyGXMhH0fXI5mMiQ/

<動画編集ソフト>
ゆっくりMovieMaker4
https://manjubox.net/ymm4/

<音楽・効果音>
甘茶の音楽工房 さん
https://amachamusic.chagasi.com/terms.html
効果音ラボ さん
https://soundeffect-lab.info/sound/anime/

<おすすめの本>
カリスマYouTuberが教えるExcel超時短メソッド
Amazon:
https://px.a8.net/svt/ejp?a8mat=3NCUSQ+AVR8TU+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0B3CP8721%2F%3Ftag%3Da8-affi-315072-22
楽天:
https://rpx.a8.net/svt/ejp?a8mat=2NQJOJ+3NKTGY+2HOM+BWGDT&rakuten=y&a8ejpredirect=https%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa16080209978_2NQJOJ_3NKTGY_2HOM_BWGDT%3Fpc%3Dhttps%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F17163337%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F20676681%252F

<しっかり勉強したい方向け>
侍テラコヤ(プログラミング言語全般を体系的に学びたい人向け)
http://msm.to/6kyRIg3
クーポン→WACHI30

#Excel
#chatGPT