2018-08-19 (Sun) Google フォームを Google スプレッドシートに反映するときのお節介を回避 [長年日記]

_ 軽く検索しても見つからなかったのでメモ

_ Google フォームに入力があると、スプレッドシート側で手作業が必要になることがある

たとえば、入力が一つだけあるフォームの結果をシート1にリンクしている場合、シート1はこんな感じになってる。

TimestampOK?
19700101000000Yes

これを別のシートから

='シート1'!A2='シート1'!B2
='シート1'!A3='シート1'!B3

というように参照して、次の入力 (A3 / B3) に備えてあるとき、値は

19700101000000Yes
  

となっているはず。 ここでフォームに二つめの入力 (行3) が来ると、そのシートは

='シート1'!A2='シート1'!B2
='シート1'!A4='シート1'!B4

に書き変えられてしまう。自動的に入力を反映して

19700101000000Yes
20180819153000No

になってほしかったのに、

19700101000000Yes
  

のままだということ。

つまり、シート1側の認識としては、それまで A3 / B3 だった行に最新のフォーム入力が入るのではなく、行2 と行3 の間に新しい行を挿入して (A3 / B3 を A4 / B4 に移動して) から、その挿入された新しい A3 / B3 に入力しているらしい。

でも自動で入力を反映したいんです

という場合に、スマートな方法があるのかどうか分からない。

とりあえずは INDIRECT でも使えばいいかな。

='シート1'!A2='シート1'!B2
='シート1'!A3='シート1'!B3

ではなく

=INDIRECT("'シート1'!A2")=INDIRECT("'シート1'!B2")
=INDIRECT("'シート1'!A3")=INDIRECT("'シート1'!B3")

にしてしまうとか。

それはあまりにもアホすぎるというのであれば

=INDIRECT("'シート1'!R" & ROW()+1 & "C" & COLUMN(), FALSE)=INDIRECT("'シート1'!R" & ROW()+1 & "C" & COLUMN(), FALSE)
=INDIRECT("'シート1'!R" & ROW()+1 & "C" & COLUMN(), FALSE)=INDIRECT("'シート1'!R" & ROW()+1 & "C" & COLUMN(), FALSE)

とでも何でも、好きなようにすればいい。(上記の例は実際に試してないので、バグってるかもしれない)

セル指定を文字列にすることによって、アプリ側から認識できないようにしているわけだから、とうぜん副作用として不便になるわけで、できるだけ避けたいことではあるが。


«前の日記(2018-04-08 (Sun)) 最新