FS静岡の集計でGoogleフォームとスプレッドを使った


FS静岡のことはG+に書いたので探してくださいな。

ここでは、Googleフォームとスプレッドでどんなことしたのかということを描きたいと思います。
Googleフォームとスプレッドを使うのは、コーディネータのashinobさんの案。
で、そこで関数を駆使して何とかしたのが僕。
集計後のチェックは複数人で行っています。

では本題。
Googleフォームは事前申請、ブートキャンプ前、ブートキャンプ後の3つを用意。
それぞれのフォームからはスプレッドに入力内容が出力される。
このスプレッドを集約するスプレッドを僕が担当。
上記の説明を図にすると以下の通り。

FS001

さらにシートの構成は以下の通り

  • インデックス用(事前)
  • インデックス用(BC前)
  • インデックス用(BC後)
  • 集計
  • 集計(BC前)
  • 集計(BC後)

事前申請スプレッドからのデータ取得方法。
インデックス用シートは、元のファイルの内容をimportrange関数でシートに取り込んでいます。
取り込んだ内容にインデックスを付けてあります。
インデックスは、取り込み元の行番号と同じです。
FS002

集計用シートの内容は、query関数を使い、インデックス用のシートから、AG名でグループ化し、インデックスの最大値を求めます。
これにより、AG名の重複を除きます。
FS003

ここでポイントなのは、query関数は大文字小文字を識別します。
なのでLower関数で小文字にして集計します。

=QUERY('インデックス用'!A2:R250, "select max(A), Lower(C) where R!='*' group by Lower(C) order by max(A)")

ここで取ってこれるのは、インデックスとAG名。
そのほかの情報は、インデックスを使って、INDIRECT関数で参照しています。
この関数はExcelと同じですね。

=INDIRECT(CONCAT("インデックス用!L",$A4))

ブートキャンプのインデックス用のシートも同じように、importrange関数で取り込み、インデックスをつけて、ブートキャンプ用の集計シートにquery関数を使って重複を防ぎます。

で、ブートキャンプ用の集計シートの内容は、事前申請のシートに追加する形で一覧化します。
この時に、MATCH関数を使って集計用シートのAG名でブートキャンプ用のシートからインデックスを求めます。

=MATCH($B4,'集計(BC前)'!B:B,0)

そしてINDIRECT関数を使い、ブートキャンプ前、後のAPやレベル、trekkerを取得します。

申請者の入力ミスさえなければ、集計シートの内容からトップ10を出したり、ファクションごと、チームごとの順位などを求めることが可能になります。

とまぁ、こんな感じで、関数を駆使して集計を行いました。

欠点としては、入力のためのアクセスが多い状態だと、重たくなるのか、スプレッドへの反映が遅くある場合があります。(これ、重要)

あとフォームからスプレッドに出力する場合、必ずしもフォームで入力する順番にはならないので注意が必要。
これに関しては、設定シートなんかを作って、「AG名はこの列」のような定義をできるようにすると後で楽になります。
さらに、シートの参照も設定で変えられるようにすると、開発段階と本番の切り替えがかなり楽にできます。
FS004

かなりざっくりとした説明ですが、こんな感じです。

多分ですけど、Windows用ですが、集計アプリ作ります。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)