Excelのセルの文章を文字数指定で要約しセルへ出力したいときはないでしょうか。
けど、そんな中で悩むことは、
・Excelワークシート関数を使いChatGPT APIと連携し要約する方法が知りたいがどこにもない
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
もくじ
Excelワークシート関数とChatGPTでセルの文章を要約するイメージ
Excelワークシート関数とChatGPTでセルの文章を要約するイメージについて説明をします。
まず、Excelを用意します。
A2セルに要約したい文章を入れ、BIセルに要約条件を指定し、となりのC1セルへワークシート関数をいれると、
ChatGPTの要約結果が表示されます。
さらに!複数文章を指定すると、
その文章分の要約結果がセルに出力されます!
それでは早速実装して、使ってみましょう。
前回のVBA版と今回のワークシート関数版との違い
前回のChatGPT APIと連携するVBAと今回のワークシート関数版の違いについて説明をします。
前回はサブプロシージャとして実装したコードとなるため、Excelではマクロとして認識されます。
ただこの場合は使いたいときに随時マクロを実行しなければいけない手間がありました。
そこで今回はワークシート関数としてコードを実装し、セルに数式を入れれば、
即時にChatGPTの結果が表示されるようにし、マクロを実行する手間をなくしていきます。
Excelワークシート関数とChatGPTでセルの文章を要約する方法
ChatGPT連携元のExcelファイルを用意
まずは、ChatGPTの連携元となるExcelファイルを用意しましょう。
続いてA2セルまたは任意のセルに要約したい文章を入れます。
次にBIセルに要約条件を文章で入力します。
要約条件は「小学生にもわかるように」など抽象的な表現でもかまいません、
ChatGPTのAPIキーを取得
今回使うChatGPTのAPIキーを取得しましょう。
API keys発行ページへアクセスします。
https://platform.openai.com/account/api-keys
「Create new secret key」をクリックし、出力されたAPIキーをメモします。
ChatGPTのAPIを使う上での注意点
ChatGPTのAPIを使う上での注意点を先にお伝えします。
ChatGPTのAPIは利用していくと料金が発生する仕組みになっています。ですので、発行したAPIを数多く使ったり、第三者に共有し、不特定多数の人達に利用されたりすると知らぬ間に費用が多額になってしまっている可能性がありますので、十分注意してください。
ただ、初回登録時は18ドルの無料枠がありますので、それを超えない分量であれば料金は発生することはありません。
今どれぐらい使っているかを確認する方法はUsageページから確認することができますので、随時確認するようにしましょう。
Excelワークシート関数とChatGPTでセルの文章を要約するVBAコード
Excelワークシート関数とChatGPTでセルの文章を要約するVBAコードは以下の通りです。
Function EXTGPTMATOME(rangInput As Range, strLang As String)
Dim objhttp As Object
Dim APIKey As String
Dim apiUrl As String
Dim strTextToPredict As String
Dim strRequestBody As String
Dim strResponse As String
Dim strModel As String
Dim strInput As String
Dim strOutput As String
Dim arrInput As Variant
Dim temp As Variant
Dim temp2 As Variant
Dim i As Integer
Dim intCount As Integer
Dim intMaxTokens As Integer
'APIキーを入力します。
APIKey = "sk-****************************************"
'ChatGPTのAPIから出力される最大文字数を指定します。
intMaxTokens = 1000
'ChatGPT APIのモデルを指定します。
strModel = "text-davinci-003"
'要約条件を取得します。セル改行コードは"\n"に置き換えます。
strTextToPredict = Replace(strLang, Chr(10), "\n")
'ChatGPTへの質問を作成します。
strTextToPredict = "以下の文を" & strTextToPredict & "まとめてください。"
'入力レンジが一つか複数であるかを判定します。
If rangInput.Count = 1 Then
'一つであれば要約文字列を変数に代入します。
strInput = rangInput.Value
Else
'複数であれば配列として変数に代入します。
arrInput = rangInput
'要約対象の文章を取得します。セル改行コードは"\n"に置き換えます。
For i = 1 To UBound(arrInput, 1)
strInput = strInput & "\n" & Replace(arrInput(i, 1), Chr(10), "\n")
Next
End If
'要約対象の文章と質問文を結合します。
strTextToPredict = strTextToPredict & "\n" & strInput & "\n"
Debug.Print strTextToPredict
'リクエスト先のURLを設定します。
apiUrl = "https://api.openai.com/v1/completions"
'XMLHTTPオブジェクトをセットします。
Set objhttp = CreateObject("MSXML2.XMLHTTP")
With objhttp
'リクエストのヘッダーを設定します。
.Open "POST", apiUrl, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & APIKey
' リクエスト文を作成します。
strRequestBody = "{""model"":""" & strModel & """, ""prompt"":""" & strTextToPredict & """, ""max_tokens"":" & intMaxTokens & ", ""temperature"":0.5, ""top_p"":1}"
'リクエストを送信します。
.send strRequestBody
'APIからのレスポンスが返るまで待ちます。
Do While .readyState <> 4
DoEvents
Loop
'レスポンス情報をデバッグします。不要であれば削除してください。
Debug.Print .responseText
'レスポンスのテキスト情報をExcel出力用変数に代入します。
strResponse = .responseText
End With
'Json形式のデータの内回答テキストがある位置から分割します。
temp = Split(strResponse, """text"":""")
'配列数を取得します。
intCount = UBound(temp)
'配列分処理を繰り返します。
For i = 1 To intCount
If i = intCount Then
'最後の回答を代入します。
temp2 = Split(temp(i), """,""")
strOutput = strOutput & Chr(10) & Replace(Replace(temp2(0), "\n", Chr(10)), "\", "")
Else
'最後の回答以外を代入します。
strOutput = strOutput & Chr(10) & Replace(Replace(temp(i), "\n", Chr(10)), "\", "")
End If
Next i
'関数に回答内容を渡します。
EXTGPTMATOME = strOutput
End Function
VBAを設定する
VBAを設定していきましょう。
先ほどメモしたAPIキーを入力します。
APIKey = "sk-****************************************************"
ChatGPTのAPIから出力される最大文字数を指定します。指定文字数が少ないと回答が途中で切れてしまう場合がありますので、注意してください。
intMaxTokens = 1000
ChatGPT APIのモデルを指定します。今回はGPT-3を対象にしています。新しいモデルが出た場合はこちらを変更してください。
strModel = "text-davinci-003"
VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
要約ワークシート関数の仕様
要約ワークシート関数の内容と構文は以下の通りです。
[関数名] | 説明 | [構文] | [引数] |
EXTGPTMATOME | 要約文字列に渡した値をChatGPTを経由し指定文章の要約結果を返します。 | =EXTGPTMATOME(要約文字列または範囲,要約条件) | 要約文字列または範囲:要約対象の文字列または複数セルを指定します。 要約条件:要約条件を指定します。アバウトでOKです。 |
Excelワークシート関数とChatGPTでセルの文章を要約する
文章を要約する
まずはセルにある文章を要約してみましょう。
英文をA2セルへ入力します。
2008年のリーマン・ショックは、米国のサブプライムローン危機が引き金となって発生した金融危機でした。この金融危機は、世界的な金融システムに深刻な影響を及ぼしました。日本の経済も、この金融危機によって大きな打撃を受けました。
B2セルへ要約したい文章を指定します。
50文字程度でわかりやすく
以下の数式を入れます。
=EXTGPTMATOME(A2,B2)
結果です。
はい、しっかり要約ができていますね!
複数セルの英文を要約対象にする
次は複数セルの英文を要約対象にします。
A3セル以降に以下の英文を入力します。
リーマン・ショックが発生する前の2007年までは、日本経済は比較的安定した成長を続けていました。しかし、リーマン・ショックによって、日本経済は急激に後退しました。リーマン・ショックによって、世界的な金融危機が発生したため、日本の輸出市場に対する需要が減少しました。特に、日本の自動車業界や電子機器業界など、輸出に依存する産業が大きな打撃を受けました。
EXTGPTMATOME関数の第一引数を以下のように変更します。
=EXTGPTMATOME(A2:A5,B2)
はい、複数セルに入力された英文もしっかり要約ができていますね!
コードの説明
ChatGPT APIと連携するVBAコードについて説明をします。
要約条件を取得します。セル改行コードは”\n”に置き換えます。
strTextToPredict = Replace(strLang, Chr(10), "\n")
ChatGPTへの質問を作成します。
strTextToPredict = "以下の文を" & strTextToPredict & "に要約してください。"
入力レンジが一つか複数であるかを判定します。
If rangInput.Count = 1 Then
一つであれば要約文字列を変数に代入します。
strInput = rangInput.Value
複数であれば配列として変数に代入します。
arrInput = rangInput
要約対象の文章を取得します。セル改行コードは”\n”に置き換えます。
For i = 1 To UBound(arrInput, 1) strInput = strInput & "\n" & Replace(arrInput(i, 1), Chr(10), "\n") Next
要約対象の文章と質問文を結合します。
strTextToPredict = strTextToPredict & "\n" & strInput
リクエスト先のURLを設定します。
apiUrl = "https://api.openai.com/v1/completions"
XMLHTTPオブジェクトをセットします。
Set objhttp = CreateObject("MSXML2.XMLHTTP")
リクエストのヘッダーを設定します。
.Open "POST", apiUrl, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & APIKey
リクエスト文を作成します。
strRequestBody = "{""model"":""" & strModel & """, ""prompt"":""" & strTextToPredict & """, ""max_tokens"":" & intMaxTokens & ", ""temperature"":0.5, ""top_p"":1}"
リクエストを送信します。
.send strRequestBody
APIからのレスポンスが返るまで待ちます。
Do While .readyState <> 4 DoEvents Loop
レスポンス情報をデバッグします。不要であれば削除してください。
Debug.Print .responseText
レスポンスのテキスト情報をExcel出力用変数に代入します。
strResponse = .responseText
Json形式のデータの内回答テキストがある位置から分割します。
temp = Split(strResponse, """text"":""")
配列数を取得します。
intCount = UBound(temp)
配列分処理を繰り返します。
For i = 1 To intCount Next i
最後の回答を代入します。
temp2 = Split(temp(i), """,""") strOutput = strOutput & Chr(10) & Replace(Replace(temp2(0), "\n", Chr(10)), "\", "")
最後の回答以外を代入します。
strOutput = strOutput & Chr(10) & Replace(Replace(temp(i), "\n", Chr(10)), "\", "")
関数に回答内容を渡します。
EXTGPTMATOME = strOutput
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す