つくったもの
はじめに
これは、GASにかまけて、表計算の関数やらQUERY関数やら使ってこなかったプログラミング初心者が、3タブくらい開きながら作ったモノになります。
コンセプトは「簡単に作る」です。
動作環境
googleフォーム、googleスプレッドシート。
つくりかた
フォームを作る。
名前と日にちと体温の項目を設定する。
検温対象の母数が多ければ、名前ではなくメールアドレスを記入してもらったり、
フォームを開く際にログインする設定にして、googleアカウントで識別してもよい。
また、日にちはフォーム送信時のタイムスタンプから取得してもよい。
今回は、結果の信頼性より、結果が歯抜けになることや、送信忘れ等の対応を嫌ったために、
日にちを記入してもらっています。
スプレッドシートの作成。
フォームの回答のスプレッドシートを作成。
作成したスプレッドシートを開き、新しいタブを作成。
縦軸に日付、横軸に名前を設定する。
関数を設定する。
結果だけ知りたい人は、最後までとばしてください。
別タブのセルを参照する。
='<タブの名前>!<セルの座標>'
Query関数を使用する。
関数リファレンス
のサンプルコードから真似てみる。
とりあえず全部取得してみる。
=QUERY('フォームの回答 1'!$A$2:$D$100,"select *")
5つの回答のデータ全てが取得出来たが、複数行と列に渡って出力されている。
Query関数の出力範囲を限定する。
googleのQueryのリファレンス
から、LIMIT句が使えるっぽいので、これで出力を1行に絞る。
=QUERY('フォームの回答 1'!$A$2:$D$100,"select * limit 1")
更に、QueryでD列を指定して、体温の列だけ取得する。
=QUERY('フォームの回答 1'!$A$2:$D$100,"select D limit 1")
これで、何があっても出力が1セルに収まる。
WHERE句を使う。
まず、名前が「Alpha」であるものだけを取得する。
=QUERY('フォームの回答 1'!$A$2:$D$100,"select D where (B='Alpha') limit 1")
これだと使い勝手が悪いので、
各列1行目にある名前と一致するものを取得する。
=QUERY('フォームの回答 1'!$A$2:$D$100,"select D where (B='"&B$1&"') limit 1")
次に、日付が一致するものを取得する。
日付の一致は、文字列の一致とは異なり、date'YYYY-MM-DD'
の形式に沿う必要がある。
=QUERY('フォームの回答 1'!$A$2:$D$100,"select D where (B='"&B$1&"' and C=date'2020-08-01') limit 1")
標準の日付の形式である「YYYY/MM/DD」から「YYYY-MM-DD」に変換するために、text関数を用いる。
=QUERY('フォームの回答 1'!$A$2:$D$100,"select D where (B='"&B$1&"' and C=date'"&text($A2,"YYYY-MM-DD")&"') limit 1")
N/Aを出力しないようにする。
ifna関数で全体を囲う。
=IFNA(QUERY('フォームの回答 1'!$A$2:$D$100,"select D where (B='"&B$1&"' and C=date'"&text($A2,"YYYY-MM-DD")&"') limit 1"),"")
この関数を全部のセルにオートフィルで適用すると完成。
さいごに
Query関数便利ですね。GASを使うか関数を使うか、上手く判断できるようになりたいですね。