回答が百件を超えたあたりで、スプレッドシートの C 列をスクロールする指が重くなってきます。要望フォームやアンケートの自由記述は、読み進めるほど一件ずつ違う顔をしていて、いつのまにか「どれから返せばよいのか」ではなく「自分は何を探していたのか」が曖昧になっていくのです。
個人開発でアプリへの問い合わせを読み続けていると、この感覚には覚えがあります。最初のうち、私自身は件数が多いせいだと考えておりました。けれど気づいたのは、重いのは件数ではなく、仕分けの基準が頭の中にしかないことだったのかもしれません、ということです。
そこで、Sheets の AI 関数に仕分けを手伝ってもらいます。最初にお伝えしたいのは、数式を書く前に決めておくものがひとつあることです。仕分けの棚です。
棚は三つと「その他」に決めておきます
AI に「いい感じに分類して」と頼むと、回答ごとに言い回しが揺れます。「ご要望」「リクエスト」「機能追加の希望」と、同じ意味の別の札が並び、あとで数えようとしたときに別々の行になってしまいます。
ですから棚の名前は、人の側で先に固定します。ここでは次の四つにします。
| 棚 | 入れるもの | 回答の例(架空) |
|---|---|---|
| 要望 | こうなってほしい、という希望 | 夜間に画面が明るすぎるので、暗い配色も選べると嬉しいです |
| 不具合 | 操作できない、動かない、という報告 | 設定を開こうとするとアプリが閉じてしまいます |
| 感謝 | お礼や、使い続けている旨の言葉 | 毎朝の楽しみになっています |
| その他 | 上のどれにも入らないもの | 広告の表示回数について知りたいです |
「その他」を置くのは、逃げ道のためではありません。AI が無理に三つへ押し込む回答を、先に受け止める場所をつくっておくためです。棚の名前は、あとで COUNTIF やピボットテーブルで数える文字列そのものになります。表記を一度決めたら、途中で変えません。
フォームの回答をシートへ流します
Google フォームの「回答」タブから「スプレッドシートにリンク」を選ぶと、回答がシートに積み上がっていきます。ここでは、C 列に自由記述、D 列に仕分け結果を入れる形で進めます。D1 に「仕分け」と見出しを書き、E1 には「人の判定」と書いておいてください。E 列は、あとで AI の答えと突き合わせるために使います。
新しい回答の行には、D 列の数式が付いてきません。付いてくるものと思い込んで放っておくと、新着だけ仕分けが空のまま残ります。下へコピーする作業は、自分の手で残しておく前提で考えるのが安全です。
最初は一行だけ、数式を入れます
D2 に次の数式を入れます。
=AI("次の自由記述を、「要望」「不具合」「感謝」「その他」のうち一語だけで分類してください。理由は書かないでください。", C2)この数式で押さえているのは三点です。
- 棚の名前を、プロンプトの中でそのまま列挙しています
- 「一語だけ」「理由は書かない」と添えて、セルに入る文字列を棚の名前だけに絞っています
- 読んでほしいデータは、第 2 引数の範囲 C2 で渡しています
読ませたいデータは、プロンプトに文字で書き込まず、範囲引数で渡すこと。Google のヘルプはこの方法を強くすすめています。AI 関数はシート全体や Drive 内のほかのファイルを読めませんので、読ませたいものは範囲に入れて見せるしかないのです。
D2 を選んで「生成して挿入」を押すと、セルに棚の名前がひとつ入ります。このとき、変更履歴にはあなたがセルの編集者として残ります。関数を挿入する操作そのものは、メニューの「挿入」から「関数」の「AI」でも行えます。
二十行で試して、人の目で突き合わせます
いきなり全件を流しません。D2 から D21 までを選んで、二十行ぶんだけ生成します。複数のセルをまとめて選んだときに生成されるのは、先頭の 350 セルまでと決まっています。二十行なら、その上限を気にする必要はありません。
ボタンが押せない、あるいは生成が始まらない場合は、置き場所やプランが原因のことがあります。その切り分けは、別の記事「Sheets の AI 関数が生成できないとき、上限より先に置き場所を疑う」に書き残しました。
二十行が埋まったら、E2 から E21 に、自分の目で読んだ判定を手で入れます。ここは面倒に感じるところですが、いちばん大切な作業です。そのうえで F 列に次の数式を入れて、AI の答えと人の判定がずれた行を拾います。
=IF(D2=E2, "", "要確認")ずれた件数は、次の数式で数えられます。
=COUNTIF(F2:F21, "要確認")二十行のうち、数件でもずれたら、私は全件を流す前に定義文を直すことにしています。これは目安であって、決まりではありません。ただ、二十行で出たずれは、二百行では十倍の数になって返ってきます。
ずれた行を読むと、原因は AI の読み間違いより、棚の境目が曖昧だったことのほうが多いと感じます。たとえば「通知が来なくて困っています」は、不具合でしょうか、要望でしょうか。人でも迷う回答は、AI にも迷います。
そこで、境目を一文で足します。
=AI("次の自由記述を、「要望」「不具合」「感謝」「その他」のうち一語だけで分類してください。操作ができない・動かないと書かれていれば「不具合」、こうなってほしいと書かれていれば「要望」とします。理由は書かないでください。", C2)定義文をシートの別セルに置いて、数式から連結で参照する書き方もあります。ただしヘルプには、連結で参照した範囲のデータが変わっても、更新を促すメッセージは出ないと書かれています。定義文のセルを書き換えたら、生成し直すタイミングを自分で決めることになります。
結果は値にして固定します
AI 関数の出力は、再生成できます。裏を返すと、同じ表を後日開き直して生成し直したとき、前回と同じ答えになるとは限りません。しかもヘルプによれば、関数の操作は元に戻すことも、やり直すこともできません。
ですから、集計に使う D 列は、仕分けが落ち着いた時点で関数ではなく値にして固定します。手でコピーして「値のみ貼り付け」をしてもよいのですが、私は範囲を選んで一回で済ませたいので、Apps Script に小さな関数を置いています。
/**
* 選択中の範囲の数式を、いまの表示値に置き換える。
* AI 関数の出力を固定してから集計に回すためのもの。
*/
function freezeSelectedRange() {
const range = SpreadsheetApp.getActiveRange();
range.setValues(range.getValues());
}getValues() は数式ではなく、いま見えている値を返します。それを同じ範囲に setValues() で書き戻すので、数式が値に置き換わります。この関数は元に戻せないため、実行の前に必ずシートのコピーを一枚残しておいてください。
使えない日には、まず三つを疑います
そもそも AI 関数が使えない場合、ヘルプは「AI 関数は使用できません」と表示される原因を挙げています。Workspace Experiments に参加していないか、AI 関数が使える Workspace プランではないこと。そして、管理者設定や言語設定が原因になっていることです。
自分で直せるのは、言語設定くらいです。それ以外は、管理者に尋ねる前に、使っているプランを一度確認するところまでが自分の持ち場だと思います。
今夜は二十行だけ流します
仕分けの精度は、数式の書き方より、棚の名前と境目をどれだけ先に決められたかで決まります。数式は最後に書き、棚は最初に決めます。 この順番だけは、案件が増えても崩さないようにしています。
まずは今夜、手元の回答から二十行だけ選び、棚の名前を四つ書き出して、D2 に数式を一本入れてみていただければと思います。ずれた行を読むことが、そのまま次の定義文になります。