【Google Spreadsheet】バーチャルマーケットでの入稿運用備忘録【Google Form】
皆さんごきげんよう。ブログ内ではあけましておめでとうございます。
バーチャルマーケットの出展者は今が頑張り時ですね。出展者用のDiscordでは、日々進捗を言い合う感じがとてもお祭り感あって最高です。また、脱稿報告のチャンネルを作ったら、もう脱稿した人も居るみたいで……まるでRTA走者ですね。
さて、今回の記事はバーチャルマーケットの入稿運用備忘録です。
入稿のフロー
バーチャルマーケットの入稿方法にはGoogleフォームを使っています。Googleフォームはファイルを添付し、その添付したデータをGoogleフォーム製作者のGoogleドライブに格納されることになります。同様に、フォームに入力した内容はGoogle Spreadsheetに格納されます。
Googleを採用したのは、基本的にGoogleが持つこの手のサービスは「共有」がしやすいからです。バーチャルマーケットは1のときと比べて、2はスタッフの数が増えています。入稿されたデータをチェックする人も、当然一人ではないので、クラウド上でファイルを管理するのが最適解でした。
それぞれのワールド
バーチャルマーケットには6個のワールドが存在しています。その中で、出展者が使うワールドは5個で、尚且いくつかのワールドは1つのワールドに収まりきらず複製されて、合計10個のワールドが生成されることになります。よく考えたら相当頭おかしい数字ですね。
この10個あるワールドを一つのGoogleフォームで運用すると、とても分かりにくく、誤って違うワールドに配置してしまう恐れがありました。なので、今回はそのワールドの分だけGoogleフォームを作成し、Google Driveの入稿先、Spreadsheetを分けることにしたのです。
見る先が多すぎる問題
Spreadsheetを10個も随時確認していくのは現実的ではありませんでした。スタッフの手間を考えると、どこかで漏れが発生する可能性もあったのです。前述のように、GoogleDriveを1つにするわけにはいかないので、Spreadsheet側のみを集約出来る方法が無いかなと思い検索をしました。
しっかり、ありました。Spreadsheetは神ツールです。
使った関数
どうせGASを使うのだろうと思い、色々と検索をかけていきましたが、どうやらSpreadsheet内にある関数のみで解決しそうだと途中で気づきました。私は元々、前職でアホみたいにExcelを使ってオートメーション化をしていました。今回使うのは、Excelでは使ったことが無い機能だったので、凄く勉強になりましたね。
1.importrange
=importrange(シート先のID,"シート名!インポートしたい場所(A:U等)")
こいつが肝でした。この関数は、外部のSpreadsheetを指定した範囲で持ってくるというものです。しかも「リアルタイム」で更新されるのです。つまり、別のSpreadsheetが更新されたら、この関数が使われている先でも更新されるというものでした。
シートのIDとはURLを見ると分かります。
https://docs.google.com/spreadsheets/d/ここの部分/edit#gid=885452602
一旦、キー情報を別シートにまとめて、A1列にキーの先を記述し、Vlookupで取得させて表示させました(こうするとコピーがとても楽、タイトルだけ変えればOKなので)
=importrange(vlookup(A1,'キー一覧'!$A:$B,2,false),"フォームの回答 1!A:E")
この機能を使って10個あるSpreadsheetを1つのSpreadsheetに集約させました。シートがばー!っと多くある感じ。
2.query
=query(選択範囲,SQL)
これも神機能です。指定した範囲をデータベースとして扱い、その範囲をSQLで抜き出すことが出来る機能です。今回の使い方は、こんな感じに行いました。
=QUERY({'バーチャルミュージアムA'!A3:F;'バーチャルミュージアムB'!A3:F;'バーチャルミュージアムC'!A3:F;FutureTerminalA!A3:F;FutureTerminalB!A3:F;'異世界マルシェA'!A3:F;'異世界マルシェB'!A3:F;'モクリバザールA'!A3:F;'モクリバザールB'!A3:F;'絢爛博覧会'!A3:F},"select * where Col1 is not null")
括弧{}で囲んでから、指定範囲を記述し、「;」で並べると、縦結合が出来るのです!ちなみに「,」で並べると、横結合です。
なので、各シートの情報を行にズラーッと書き出してくれるというわけですね。指定先を「A3:F」にしておくと、A3セルからF列の一番下まで選択してくれるのです。更に、肝はSQL部分です。
「where Col1 is not null」を記載しておくと、空白部分については除外してくれるというものです。ちなみに、「select *」は列の指定です。全部欲しかったので「*」を入れています。
ちなみに、こちらも同じく「リアルタイム」での処理になるので、参照先で増えれば、どんどん行が増えていくという代物です。これで、Spreadsheetのシート1つに並べることが出来ました。
3.sort
=sort(選択範囲,指定列,昇順降順)
実はqueryで「order by A asc」とか指定すれば勝手にタイムスタンプで昇順になってくれると思ったのですが、どうにも動作が上手く行かずでした……。
なので、今回はもう一枚シートを作り、ソートのみをしたシートを作成しました。queryでそのまま読み込むと、データで取得した順に貼り付けて行くということになるので、途中途中の合間にデータが追加されることになり、とても見にくい為です。
=sort('確認用'!$A$3:$F,1,true)
今回はこんな感じで使いました。確認用っていうのがqueryで持ってきた所のシートですね。そこの1列目がタイムスタンプだったので、1を入れて、trueを入れれば昇順になります(降順はfalse)
何度も言いますが、これも「リアルタイム」での処理です。
使った関数は以上。あとは基本的なVlookupだけです。importrangeでサークル情報から抜き出してきて、メールアドレスで照らし合わせ、チェックする人の負荷をどんどん軽減していきました。Spreadsheetは神です。
出展者への情報共有
Spreadsheetで確認作業を進めて行くということになった……それならば出展者が入稿出来たか確認とスタッフがチェックしたかどうかを出展者が見れるようにしてしまえば良い!と思い立ったわけです。
ヒントはVRChatのPublic申請でした。あれもGoogleフォームを採用しており、その結果は利用者に共有し、確認させています。
一応セキュリティのため(多分大丈夫だと見越していますが)Spreadsheetを新しく作成し、確認しているシートを丸々importrangeで持ってきます。表示させたい所だけ、表示させてから、「ファイル→ウェブに公開」を押してURLを取得。
あとは、出展者に「ここで入稿状況が分かる、完了になったら脱稿だ!おめでとう!」とメールを送って終わりです。
皆さんワールド製作者も多かったので、馴染みのある見た目だったのかな?とも思っております。
バーチャルマーケットの運営はこれからが本番で、確認作業・配置作業はとてもとてもとても骨の折れる作業です。それでも、皆さんから頂いたブースを大切に……バグの無いように!頑張ろう~!
以上、入稿運用備忘録でした~!