前回の続きです。
多分、全部で4回くらいになると思ううちの、3回目です。


前々回、IFTTT の Google スプレッドシートの設定をサラッと書きました。
特に『Formatted row』のところ。
ここについて、今回は解説を書きたいと思います。
=DATEVALUE(SUBSTITUTE(GOOGLETRANSLATE(LEFT("{{OccurredAt}}",FIND(" at ","{{OccurredAt}}")),"en","ja")," ",""))+TIMEVALUE(RIGHT("{{OccurredAt}}",LEN("{{OccurredAt}}")-FIND(" at ","{{OccurredAt}}")-3)) ||| {{Value1}} ||| =SUBSTITUTE(INDIRECT(“RC[-1]”,FALSE),"�", "") |||=IF(COUNTIF(INDIRECT("R1C[-1]:R[-1]C[-1]",FALSE),INDIRECT("RC[-1]",FALSE)),INDIRECT("RC[-3]",FALSE)-MAXIFS(INDIRECT("R1C[-3]:R[-1]C[-3]",FALSE),INDIRECT("R1C[-1]:R[-1]C[-1]",FALSE),INDIRECT("RC[-1]",FALSE)),"")|||
IFTTT でトリガーを発動したあと、特定の Google スプレッドシートの最初のシートの一番下に、このルールで行を追加する、というものです。
まず、『|||』というのがスプレッドシートのセルの区切りになっています。
まー、『\t(タブ)』ってことですかね。
なので、『|||』を区切り文字として分けると、上の数式には4つのパートがあることがわかります。
1つ目は、日付の処理部分。
=DATEVALUE(SUBSTITUTE(GOOGLETRANSLATE(LEFT("{{OccurredAt}}",FIND(" at ","{{OccurredAt}}")),"en","ja")," ",""))+TIMEVALUE(RIGHT("{{OccurredAt}}",LEN("{{OccurredAt}}")-FIND(" at ","{{OccurredAt}}")-3))
2つ目は、Webhook で渡す商品名の部分。
{{Value1}}
3つ目は、2つ目の商品名の文字列を置換する部分。
=SUBSTITUTE(INDIRECT("RC[-1]",FALSE),"�", "")
4つ目は、同じ商品を前回入力してから今回までどれくらい間が空いたかを表示する部分。
=IF(COUNTIF(INDIRECT("R1C[-1]:R[-1]C[-1]",FALSE),INDIRECT("RC[-1]",FALSE)),INDIRECT("RC[-3]",FALSE)-MAXIFS(INDIRECT("R1C[-3]:R[-1]C[-3]",FALSE),INDIRECT("R1C[-1]:R[-1]C[-1]",FALSE),INDIRECT("RC[-1]",FALSE)),"")
こんな構成です。
まず1つ目ですが、これについては以前記事を書きました。

去年の8月ですね。
ちょうど、このしくみをやってみたくていろいろ考えたり調べたりしていた頃でした。
1つ目(再掲、以前書いた記事とも同じものです)
=DATEVALUE(SUBSTITUTE(GOOGLETRANSLATE(LEFT("{{OccurredAt}}",FIND(" at ","{{OccurredAt}}")),"en","ja")," ",""))+TIMEVALUE(RIGHT("{{OccurredAt}}",LEN("{{OccurredAt}}")-FIND(" at ","{{OccurredAt}}")-3))
IFTTT では、その Webhook を発動した日時の情報をスプレッドシートに書き込むことができます。
『{{OccurredAt}}』と書き込むと日付が表示されるようになっているんですが、その書式が『March 19, 2025 at 07:00PM』みたいな変な書式なんです。
このままではスプレッドシートでは『日付』の情報として扱ってくれないのでとっても厄介。
なので、その『{{OccurredAt}}』の文字列をいろいろこねこねしたのが上です。
以前ネットで調べたものは、ここ数年で IFTTT の仕様が変わったのか使えないものが多かったので、なんとかまとめました。
詳しい解説は以前の記事に書いたので、そちらをご確認ください。
2つ目(再掲)
{{Value1}}
これは、Webhook で渡す文字列を表示させる部分です。
前回、Webhook の後ろに『?value1=◯◯』と付けて渡した文字列(商品名)がここに入ります。
3つ目(再掲)
=SUBSTITUTE(INDIRECT("RC[-1]",FALSE),"�", "")
ここはね…、なぜだかわからんのですが、Webhook で渡した商品名の文字列の最後に『�』がつくんですよね…。
まー、エンコードの問題だと思うんですが、対応もめんどくさいです。
というか、私レベルではなんともできないっす。
べつに、最後につくだけで他の文字が文字化けするわけではないので、放って置くか1文字取り除くかかな、と思って、1文字取り除く方を選択しました。
たまに『しょうゆ�』みたいな文字列を渡されるので、この数式で『�』を取って『しょうゆ』にシているというわけです。
『SUBSTITUTE』関数は、文字列にある特定の文字を別の文字に置き換える関数です。
わざわざ『INDIRECT』関数を入れているのは、そうすることでセルの指定ができるからです。

↑こちらで以前書きました。
4つ目(再掲)
=IF(COUNTIF(INDIRECT("R1C[-1]:R[-1]C[-1]",FALSE),INDIRECT("RC[-1]",FALSE)),INDIRECT("RC[-3]",FALSE)-MAXIFS(INDIRECT("R1C[-3]:R[-1]C[-3]",FALSE),INDIRECT("R1C[-1]:R[-1]C[-1]",FALSE),INDIRECT("RC[-1]",FALSE)),"")
こちらの数式については、上の『INDIRECT』関数の記事でみっちり書いています。
いやー、Google スプレッドシートも『INDIRECT』関数を使えば『R1C1形式』で数式が書ける、ということに気づけてよかったです…。
こうやって Google スプレッドシートに『タイムスタンプ』と『商品名』を渡すことができれば、あとはスプレッドシートの方でこねこねして好き勝手にすればいいですね!
次で最終回にできるかな。
次回はその他の IFTTT の設定と実際に使っているモノを紹介させてください。
コメント