Excelワークシート上で使える「ChatGPT関数」、Officeアシスタントの「カイル君GPT」を作って実際に使ってみて、やはりChatGPTをExcelから扱えるのは楽しいのです。ただ、いずれも会話が単発の一問一答なので、Chatボットのように連続会話がしたくなってしまいました。ユーザー定義関数では引数が複雑になりそうなので、ここはExcelワークシート上で連続チャットできるように作ってみようかと。OpenAIのWebページのように質問と回答が交互に表示されて、かつBingチャットのように、右が自分の発言、左にChatGPTの回答が表示されるようにしてみます。ChatGPTが参考にする過去の会話履歴の数や、本Blogでも紹介した全体的な指示役割(会話スタイル)や温度も指定できるようにしています。
このような設定シート上で様々なパラメータを指定できるので、ChatGPTで色々試したい時に便利です。ワークブックのダウンロードは次のボタンから。初回起動前に、ダウンロードしたファイルの [プロパティ] ダイアログの [全般] タブの [ブロック解除] または [セキュリティを許可] チェックボックスをオンにしてください。(マクロに保護はかけていないので安心してご使用いただけます。)
実際のチャット画面で連続した会話が成立するか、ChatGPTは過去の発言を覚えてくれているか、次のように聞いてみます。
まず、「日本の¥マークは\1000と1000¥、どちらが正しい?」と尋ねると、なんとも言えない回答が返ってきています。その後の「10000はどのように表記する?」に対しては、「\10,000」と回答、確かに、その前の¥に関する質問に応答した回答となっていますね。
新たな気持ちで質問したい時に便利、過去の内容を参考にしない「新しいトピック」を指定できるようにしました。それをオンにして、「10000はどのように表記する?」と尋ねた結果はこちら。
期待通り、¥のことには触れずに「10,000」と回答してくれます。いい感じ。さらに連続した会話を弾ませるべく、別のパターンで試します。
さあ、ここで牛肉と玉ねぎとジャガイモを使った料理のレシピを聞いてみます。材料は「それら」でひとくくり、前回の会話を覚えていないと答えられないはず!
出た、ビーフシチュー!カレーライスを期待したのですが、まあ素晴らしい。ちゃんと食材を覚えてくれていました。ではでは、持っている材料を一つずつ伝えて、それらを全て使った料理を聞いてみたらどうなるでしょう。
大丈夫、全部覚えてくれてて、抜群の安定感で流れるように会話できるようになりました。
マクロコードで行っていることは、過去に公開しているChatGPT関数と大差はなく、APIに送るプロンプトに過去の会話を追加しただけです。
ChatGPTの話ではないですが、Excelでセルの内容が全て表示されるようにする行の高さの自動調整、結合したセルに対しては機能しないんですよね。今回、会話内容を左と右に分けて表示させるために結合したセルに対して、自動で高さ調整されるよう次のようなコードで処理しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
'結合セルの行の高さを設定 Sub SetFitHeight(MyRng As Range) Dim FitHeight As Double Dim c As Long, w1 As Double, w2 As Double c = MyRng.Column w1 = Cells(1, c).ColumnWidth w2 = Cells(1, c + 1).ColumnWidth With Sheets("Temp").[A1] .Value = MyRng.Value .ColumnWidth = w1 + w2 .EntireRow.AutoFit FitHeight = .RowHeight End With MyRng.RowHeight = FitHeight End Sub |
行の高さを調整したい結合セルの値を、TempシートのA1セルに書き込み、結合セルの列幅と同じに設定してオートフィット、調整された行の高さを取得して、結合セルの行の高さに設定する、という流れです。
それでは良いVBAライフを。
コメント