IFTTTでグーグルスプレッドシートにデータを追加したら関数の参照がずれる問題に対応
WorkflowとIFTTTを使っていろんなデータをグーグルスプレッドシートに自動で入力する方法についてこれまでいくつか記事をあげてきました。
その入力されたデータから関数を組んで自動でグラフを作るようにしていたのですが、いつのまにかうまくグラフが作られなくなってしまったのでそれに対応しました。
IFTTTは列を追加する
IFTTTでグーグルスプレッドシートにデータを入力する機能は“Add row to spreadsheet”という名前なのですが、日本語にしたら“スプレッドシートに列を追加する”という意味ですね。
エクセルでは列を追加した場合、関数のセルの参照先はその追加に伴って自動で変わります。(列を追加しても計算結果が変わらないように参照している物自体は変わらない。)
例えば、ある関数がA1を参照している時に上の列に列を追加したら、その参照先はA2になります。
なので、エクセル的に言うと列を追加してデータを追加してもそのデータが自動で参照されることはありません。
( SUM(A1:D1) という関数を組んでいて、その上に列を追加したらその参照はSUM(A2:D2)となるので新しく1列に追加されたデータのSUM()を自動で作ることはできない。)
私がこの関数をグーグルスプレッドシートで作成したときは列の追加があっても参照先が変わらなかったのでグラフまで自動で作成できました。
しかし、最近、グラフがうまく作成されないので確認してみたらエクセルと同じように列を追加したら参照が変更される仕様になっていました。
これでは自動配信させている意味がなくなってしまうのでいろいろと関数を組み直しました。
INDIRECT関数で参照がずれないように
いろんなやり方があると思いますが、私はINDIRECTを使って対応しました。
INDIRECTは参照を文字列として指定できる関数です。文字列として参照するので列が追加されても参照が変更されることはありません。
例えば、セルA1を参照したい時は以下のように書きますね。
=A1
このような書き方だと列などが追加されると参照がずれてしまいます。そこでINDIRECTを使って以下のように書きます。
=INDIRECT(“A1”)
こうすると何があろうとA1を参照します。
このINDIRECTの中は文字列であれば良いため、関数を組み合わせることもできます。
そこで以下のような関数を組み合わせて追加される列を参照できるようにしました。
=INDIRECT(“‘シート1’!A”&A1)
まず、右側のA1という部分ですが、ここには1から連番で数字を入れてあります。A1には1、A2には2という感じです。
&は文字列と文字列をつなげる記号です。
「 ‘シート1’!A 」は単純な文字列ですが、A1と&が組み合わさると「‘シート1’!A1 」となります。
‘シート1’にはIFTTTからデータが入力されていて、「‘シート1’!A1 」を参照することでIFTTTのデータからグラフを作成できるようにしました。
この関数を入力しているA列に連番を入力していることでIFTTTで列を入力していっても参照がずれることなく、シート1の上から順番に値を参照することが可能になっています。
思い描いたことは大体できる
IFTTTのデータが自動で反映されずグラフができなかった時はちょっと焦りましたが、方法を探せばあるものですね。
エクセルをいじっていると思うのは「こうできないかなぁ」ということは大体できてしまうということです。
もっといい方法もあるかもしれませんが、とりあえずこれで問題解決しました。
INDIRECTの使い方についてはこちらの記事でもご紹介しています。
皆さんの参考になれば幸いです。
ディスカッション
コメント一覧
まだ、コメントがありません