Google Apps ScriptでgetValue()すると、セルの値と取得した値がずれてるんだが。

~目次~

  1. やったこと
    1. 作成コード
  2. つまづいたところ
    1. 不具合内容
    2. 原因
    3. 解決策
  3. やってみた感想
  4. その他参考記事

やったこと

  • 特定のセルの値をgetValue()で取得して、その値をもとにIF文を組む。
  • なぜかgetValue()で正常に値が取得できなかったので、スプレッドシートでfilter関数を用いてIF文が組めるようにした。

作成コード

作成したコードの一部を載せておく。

スプレッドシートは以下のような状態。

つまづいたところ

getValue()で取得した値によって、IF文を組んで処理を分岐させようと思ったが、正しくgetValue()で値が取得できなかった。

不具合内容

getValue()で取得した値が、セルの値と違っていた。
セルによっては適切に値が取得できるが、正しく値が取得できないセルもあった。法則性を見出すのも難しかった。

例えば、先程と同じスプレッドシートにおいて、以下のスクリプトを試してみた。

 

実行結果は以下。
U4のセルの値を取得しているので、値は1、データ型はnumberが正しい値のはずだが、異なる値を取得している(もしくは、変数にはいってしまっている)。
なお、U4のセルには関数が入っており、関数の内容は以下。特に特殊な関数を使っているわけでもない。

原因

不明。コードにミスはなかったので、Google Apps Script内部の不具合だと考えられる。
こちら側で対策できることはないと思われる。

また、上記のスプレッドシート関数で集計したデータは、もともとIMPORTHTML関数を用いて取得してきたもの。
IMPORTHTML関数を用いて取得したデータを集計した値に対して、上記の不具合が発生するのかもしれない。

解決策

もともと、実装したい機能としては、
『U2セルの値が1以上のとき、TRUEの処理を行う』というものだった。

U2セルの値が適切に取得できなかったので、FILTER関数を用いて、U列が1のものをW列に出力させた。
W4セルに入れている関数は以下。

FILTER関数は、条件を満たすものがなかった場合、以下の画像のように「#N/A」が返ってくるので、
『W4セルが#N/Aでないとき、TRUEの処理を行う』というIF文を組んだ。
なお、#N/AはgetValue()で値を取得できた。

やってみた感想

Google Apps Scriptでは、こういうワケのわからんエラーが出たりするのか。
Google Apps ScriptはサーバーレスでWebアプリが開発できる分、内部で起こっているエラーに対応できないということが起きやすいのかもしれない。
しかし、今回の不具合は改善されるのだろうか…。

その他参考記事

Google Apps Script試行錯誤Blog: データの型を取得する
Google Apps Script試行錯誤Blog: 値を取得するメソッドは getValue() と getDisplayValue() がある

コメント

タイトルとURLをコピーしました