残業を減らす!Officeテクニック
ExcelでChatGPTを呼び出す関数を徹底解説 ~使い方から仕組みまで
2023年4月17日 06:55
以前の記事で、GoogleスプレッドシートにChatGPTの回答を表示させる操作を紹介しました。Excelにも同様のアドインがあれば手軽に使えるのですが、本稿執筆時点で公開されていません。
そんな折、こちらのWebサイトにて「ChatGPT3.5をExcelワークシート関数として使用する」という記事を紹介していただいたので試してみました。
VBAで「ユーザー定義関数」を作成して、ワークシートから呼び出すことで、一般的な関数を入力する手軽さで、ChatGPTの回答をワークシート上に表示可能になります。デジィEXP氏の記事には、コピペOKのコードが掲載されていますが、VBAに馴染みがないと試しにくいでしょう。今回は、注意したいポイントを補足して、操作手順を紹介したいと思います。
APIキーの取得
まずはExcelからChatGPTへアクセスするためのAPIキーを取得しますが、ChatGPTを利用するためのOpenAIアカウントは作成済みとして話を進めます。未作成の方は以前の記事を参考に作成しておいてください。
なお、APIの無料枠上限に達していたり、有効期限が切れていたりする場合は、これから作成するユーザー定義関数の結果がエラーとなります。usageのページを確認してみましょう。
今後もAPIを利用するなら従量課金の有料プランを検討してもいいと思います。本稿執筆時点で最新の「gpt-3.5-turbo」でも、1,000トークンあたり0.002米ドルです。
API Keysのページに自分のOpenAIアカウントでログインした状態で操作します。生成したAPIキーはメモ帳などにコピー&ペーストしておきます。ただし、APIキーが漏洩すると、無断で利用されて料金発生の原因になるので厳重に管理してください。
Excelの準備
VBAのコードを記述するため、Excelで新規ファイルを作成して任意のファイル名を指定し、[Excelマクロ有効ブック(*.xlsm)]で保存しておきます。また、[Excelのオプション]から[開発]タブを表示しておくと便利です。
文章で質問することとChatGPTからの回答文を踏まえて、セルを広げて[折り返して全体を表示する]を有効にしておきます。また、これから作成するユーザー定義関数をワークシートに入力して確定すると、その都度リクエストとレスポンスが発生します。[計算方法]を[手動]にしておくことをおすすめします。
VBAコードの入力
[開発]タブから「Visual Basic Editor」(VBE)の画面を起動して、標準モジュールを追加します。混乱を避けるために作業中のExcelのウィンドウ以外は閉じておくといいでしょう。
あとは「ChatGPT3.5をExcelワークシート関数として使用する」からコードをコピー&ペーストし、「strAPIKey = ""」の2つある「"」の間に用意しておいたAPIキーを入力して上書き保存するだけです。前後の「"」を消去しないように注意してください。
コードの意味
コードの意味を簡単に説明します。「Function ChatGPT(strText As String, Optional strSystem As String) As String」は「ChatGPT」という名前のユーザー定義関数を定義するという意味。ワークシートに表示される(ユーザー)関数名が連動することを覚えておきましょう。
ワークシートに「ChatGPT」関数を入力する際、引数として指定する値が変数「strText」と「strSystem」にセットされます。「strSystem」はオプション扱いなので省略可能。「Dim~As」はここで利用する変数の宣言です。
「'ChatGPTの設定」以降の5行は、ChatGPTへ渡すパラメーターの値の設定です。ここでは、トークン数「1000」、モデル「gpt-3.5-turbo」、ポスト先「https://api.openai.com/v1/chat/completions」、厳密さ「1」とセットしています。
「'文字列内の改行削除」の下2行で質問文に含まれる改行を削除します。「Set objHttp = CreateObject("MSXML2.XMLHTTP")」は、VBAでHTMLページを参照する際の定型句と考えてください。
「'ヘッダー設定」と「'リクエスト」に続くコードは既定の形式をVBAの様式に当てはめています。
リクエストやパラメーターなどについて詳しく知りたい場合は、ChatGPTのAPIのリファレンスに掲載の情報を参照してください。
「Debug.Print strRequest」と「Debug.Print .ResponseText」はなくても動作しますが、リクエストとレスポンスの確認に利用できます。興味がある方は、ChatGPT関数の利用後に、VBEの画面で[表示]-[イミディエイトウィンドウ]を選択して、イミディエイトウィンドウを表示してみてください。例えば、以下のようなレスポンスの結果が出力されます。
{"id":"chatcmpl-74QiBvf964OGq0VxaQOaxP8MabXCc","object":"chat.completion","created":1681290347,"model":"gpt-3.5-turbo-0301","usage":{"prompt_tokens":28,"completion_tokens":478,"total_tokens":506},"choices":[{"message":{"role":"assistant","content":"VLOOKUP関数は、Excelの関数の1つで、指定した値を検索して、対応する行または列から指定されたセルの値を取得するために使用されます。\n\nVLOOKUP関数の構文は以下の通りです。\n```\n=VLOOKUP(検索値, テーブル範囲, 列番号, [一致型])\n```\n\n・検索値:検索したい値(文字列、数値、セル参照)を指定します。\n・テーブル範囲:検索対象となる範囲を指定します。\n・列番号:テーブル範囲内の取得したい列の番号を指定します。\n・一致型:オプションです。検索値と一致する値の取得方法(近似値、完全一致など)を指定します。\n\n例えば、「商品コード」と「商品名」が書かれた表から、ある商品コードに対応する商品名を取得したい場合、以下のようにVLOOKUP関数を使用します。\n\n```\n=VLOOKUP(A2, B2:C10, 2, FALSE)\n```\n\nこの場合、「A2」には検索したい商品コードが入力されており、「B2:C10」には商品コードと商品名が書かれた表が指定されています。そして、「2」と指定することで、商品名の列を指定しています。「FALSE」と指定することで、完全一致の検索を行います。\n\nVLOOKUP関数は、Excel上でよく使用される関数の1つであり、大量のデータを処理する場合などで効果的に活用できます。"},"finish_reason":"stop","index":0}]}
「'Jsonからテキストを取得」以降で、回答文だけを取り出す処理の内容を理解しやすくなります。
ユーザー定義関数「ChatGPT」の利用
作成したユーザー定義関数「ChatGPT」を使ってみましょう。一般的な関数と同じように「=ChatGPT(」と入力して、質問を入力したセルを参照します。まずは質問だけ指定してオプションの役割は省略してみます。
役割を指定すると回答の雰囲気は変わります。以下は微妙な回答ですが、ChatGPTもこれから成長していくのでしょう。