応用:別のスプレッドシートから選択肢を取り込む
選択肢シートは、アドオンが読み取る唯一の場所です。A 列に選択肢、B 列に定員を入力すると、アドオンが申し込み数を C 列に書き込みます。Drive の他のものには一切触れません。
使いたいリストがすでに別のスプレッドシート(名簿、在庫表、誰か他の人が管理しているシートなど)にある場合、入力し直したりコピーしたりする必要はありません。数式で A 列をそのシートに向ければ、フォームはそれに従います。
数式
選択肢シートを開き、その質問のタブに移動します。接続時に A 列には質問の現在の選択肢が書き込まれているので、まず見出しより下の A 列をすべて空にしてください。数式は結果が広がるにつれて下のセルを埋めていき、その中に値の入ったセルがあると #REF! で止まります。
次にセル A2 をクリックして、次のように入力します。
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit", "Sheet1!A2:A")
URL は元となるスプレッドシートのものに、Sheet1!A2:A は選択肢が入っているタブと列に置き換えてください。元のシートに見出し行がある場合は、範囲を 2 行目から始めます。
初めて行うときは、セルに #REF! が表示されます。Enter を押すと選択は 1 行下に移っていて、スプレッドシートは数式のセルが選択されている間しかアクセスを許可の確認を表示しません。もう一度 A2 をクリックして確認を出してください。アクセスを許可を一度クリックすれば値が現れます。この許可はスプレッドシートの組み合わせごとに行われ、確認が表示されるのは両方を開ける人だけです。
A1 は Options のままにしてください。アドオンはこの見出しでタブのレイアウトが保たれているかを確認しており、変更されると同期が停止します。
そのあとどうなるか
他に変わることはありません。フォームは通常のスケジュール(サイドバーを開いたとき、および 1 時間ごと)で同期され、同期のたびにその時点で数式が返す値を読み取ります。元のスプレッドシートを編集すれば、新しい値が次回の同期でフォームに届きます。
定員には注意が必要
B 列の定員は、行によって選択肢に対応づけられます。B5 の数値は A5 にある選択肢に上限をかけます。
手で入力したリストは動かないので、通常の使い方ではこの点は表に出ません。数式で供給されるリストは動くことがあります。元のシートで行が挿入・削除・並べ替えされると、選択肢がずれる一方で定員はその場に留まり、間違った行に付いてしまいます。
安全を保つ方法は 2 つあります。
- 元のリストの行は、途中ではなく末尾で追加・削除する
- 並べ替えを行ったあとは、選択肢シートを開いて、各定員が正しい選択肢の隣にあるか確認する
定員をまったく使っていない場合は、以上はどれも当てはまりません。
数式が壊れたとき
アクセス権が取り消されたり、元のファイルが削除されたり、範囲が無効になったりすると、セルは #REF! や #N/A のようなエラーになります。
アドオンはそれをフォームに書き込むことはありません。同期は停止し、質問はすでに持っている選択肢を保ち、サイドバーには選択肢シートを直すよう促す同期エラーが表示されます。シートを開き、数式を直して、もう一度同期してください。
エラーになっているセルに IMPORTRANGE が入っている場合、サイドバーはそのことを伝え、アクセスを許可の確認に戻るよう案内します。一度も許可されていないアクセスは、壊れた数式とまったく同じに見えるからです。選択肢シートで A2 をクリックし、確認が出たらアクセスを許可して、もう一度同期してください。
ピッカーではなく数式である理由
アドオンの中から外部のスプレッドシートに接続するということは、それらのファイルへのアクセス権をアドオンに与えるということです。さらに、選択肢シートの意味が、そこを見ているだけでは分からない設定によって 2 通りに変わってしまいます。数式であれば、1 つのルールが常に真であり続けます。Options と Capacity はあなたのもの、Taken はアドオンのもの。そしてアドオンは、フォーム用に自ら作成したもの以外のスプレッドシートを決して読み取りません。
