【2021-06-15 更新】時代遅れとまでは言いませんが、 メールアドレスを収集すればいい話なのでは? と思ってしまいます。 メールアドレスを収集できない、かつ名前を公開していい状況で 有効ですが、かなり限定的なシチュエーションに思えます。

この記事では 「Google Form で回答者の名前を回答者に記入させることなく取得する」 という内容をまとめます。 この内容を理解すればGoogle Formを使う時に以下のメリットがあります。

  • 回答者の打ち間違いによる表記ゆれを防げる
  • 回答者にとって名前を打ちこむという手順が減る

上を実現するためには以下の3つのポイントを理解せねばなりません。 しかし「そもそもGoogle FormやGoogle Sheetとは何か」という話は説明すると長くなってしまいます。 したがって、この記事では動画の説明を貼っておくに留めます。 出席の確認を自動にする、という内容で導入には分かりやすいので、そちらを事前にご覧ください。

Google Form と FormCreatorの「リスト」

FormCreatorとはGoogle SheetからGoogle Formを作るアドオンです。 これは授業の準備だけでなく、 実験の質問紙をつくるときにも使えるので知っておいて損は無いと思います。 使い方はこの動画(formCreator Dev Video) を見ていただければ分かると思います。

FormCreatorの使い方は上の動画でなんとなく分かったと思うので、 次は本題の「リスト」機能の話に移ります。 リスト機能で作った設問の見た目はこんな感じになります。

Google SheetのアドオンFormCreatorの「リスト」を使って作ったForm

参加者にとっては打ち込む手間が減り、 また主催者にとっては参加者の表記ゆれが無いので嬉しいですね。 これを実現させるためにはFormCreatorの Listを使います。 アドオンの使い方は上に紹介した動画で説明されているので省きます。

Google SheetのアドオンFormCreatorのリスト

これでリスト形式のフォームは作れるのです。Googleは本当にすごいです。 ただ最後の方、Begin Choices (Depending on question Type) という列から右にだらだらと名前を記述しているのが確認できると思います。 よく見ると、12b2001 john mathewxからはじまり 12b2002 asdf aaaと行形式で続いていきます。 でも、この名前を手で記入していくのはしんどいですよね。

確かに一度打てば終わりなのでデータの管理に興味がない人はここで終わりで良いと思います。 しかし名前やidというデータはどこか他の場所に列形式で管理しているはずです。 この列形式のデータを行形式に変えられれば、 コピーのし忘れや打ち間違いという教師側のミスと作業時間を削れます。 それを可能にするのが TRANSPOSE 関数です。

TRANSPOSE function

この TRANSPOSE という用語は線形代数に出てきます。 そのお気持ちは公式ドキュメントのTRANSPOSE function にでてくるExamplesの図を見ると一目瞭然です。 これを文で説明するのはなかなかしんどいので是非とも図を見てください。

この関数を「名前を管理している別のシート」に置きます。 なお、「別のシート」というのは別のブックのシートのことです。 ブックというのは「エクセルのファイルみたいなもの」という理解です。 下に関数適用の様子を置いておきます。 ちょっと分かりづらいですが、 このブックには student-table というシートと name というシートがあります。 student-table で名前を管理して、 その名前を転置したものをname に置いておく、という感じです。

名前を管理しているブックのシートにTRANSPOSEを適用する様子

さて、これを先ほどのFromCreatorにコピーすればもう終わりです。 でも、コピーした後になんらかの事情で変更が必要になる場合があるかもしれませんし、 毎回範囲指定してコピーして貼り付け、というのもなんだかなぁという感じです。 そんな場合に使えるのが IMPORTRANGE です。

IMPORTRANGE

IMPORTRANGE を使えば、 任意のブックにある範囲を 他のブックから参照できるようになります。 詳しい使い方は、やはり公式ドキュメント(IMPORTRANGE) をご覧ください。

結論からいうと、 FormCreatorでリストを作るためには行形式で名前を持っておく必要がありましたが、 その行形式の部分に先ほどの転置済みの範囲を指定してあげます。 その様子を下に置いておきます。

TRANSPOSEを適用した名前をIMPORTRANGEで参照する様子

まとめ

これで参加者が記入する必要のないフォームができました。 メリットとしては、 回答者が打ち間違えて発生する「表記ゆれ」を事前に防げます。 更に、回答者にとっては名前を打ちこむという手順が減るため、 より気軽にフォームを投げられるようになります。

そのために、3つのステップが必要でした。 まずはFormCreatorの「リスト」で、 名前を横持ちにするのは手間がかかるので 標準の関数であるTRANSPOSE function を使いました。 更に、それをコピーするのは変化に弱いのに加えて手間がかかるので、 おなじく標準の関数であるIMPORTRANGE を使って別のブックの範囲を参照して解決しました。

これで準備は万端です! もし分かりづらく書いてしまっているところがあればコメントか GitLabのIssue (招待します) を切っていただけると幸いです。