ImportRangeやvlookupを多数使っているスプレッドシートからのデータ取得

5,387 views
Skip to first unread message

masakih

unread,
Sep 25, 2013, 8:36:39 PM9/25/13
to google-app...@googlegroups.com
Google Apps Scriptに関する質問です。

getValues() でスプレッドシートの値を取得して配列に格納しているのですが、取得元のスプレッドシートで
ImportRangeやvlookup等の関数を多数使用しているためか、取得した値が "#N/A" や "#VALUE!" となってしまう
場合があります。
スプレッドシート上の計算が完了していない状態で値を取得しているような感じです。
一部だけ計算済みの正しい値が入ることもあります。

何度かスクリプトを再実行したり、取得元のスプレッドシートを開いたりすると、正しく計算後の値を取得できるようになりますが、
朝一番で実行した時など、必ず失敗してしまいます。

これを回避する(最後まで計算が完了してから値を取得する)方法はありますでしょうか?

初心者ゆえ、初歩的なところで大きな間違いをしていたら申し訳ありませんが、皆様のお知恵を拝借できますでしょうか。

soundTricker

unread,
Oct 22, 2013, 10:58:38 PM10/22/13
to google-app...@googlegroups.com
返信遅れてすいません。
大橋(soundTricker)です。

残念ながら待つということは今のところ機能としては提供されていません。
ここ(http://stackoverflow.com/a/17371490/1349258)にあるように、
値を取得して、値が取れるまで待つというロジックを書く必要があります。







masakih

unread,
Oct 23, 2013, 8:35:10 PM10/23/13
to google-app...@googlegroups.com
ご返答ありがとうございます。

なるほど、そのような方法があるのですね。
いずれにせよ「待つ」場合、実行時間長期化のためタイムアウト対策が必要そうですね。

結局のところ、処理高速化も考えまして、関数を含む元シート'A'とは別にシート'B'を用意し、
関数の計算結果をシート'B'に値のみコピーし、スクリプトはシート'B'を見て動作させるようにしました。
シート'A'が更新されるたび、シート'B'に自動的にコピーさせるスクリプトを組んでいます。

ただし、シート'A'の更新はスプレッドシートを開いた状態(関数の計算処理が終了している状態)
でしか行われないという性質のため成り立つわけですが・・・

soundTricker

unread,
Oct 23, 2013, 9:45:15 PM10/23/13
to google-app...@googlegroups.com
そうですねぇ
僕がやっているのはImportRangeや、vLookUpはGAS側で同じような実装ができるので
GAS側で全部やってしまっています。

結構早くなりますよ。

masakih

unread,
Oct 24, 2013, 2:34:59 AM10/24/13
to google-app...@googlegroups.com
すみません、不勉強で大変申しわけないのですが、vLookUpをGASで処理する場合、
ルックアップ先を for~ if~ でなめていく方法しか知りません。
何か良い方法はありますでしょうか?

soundTricker

unread,
Oct 24, 2013, 4:43:45 AM10/24/13
to google-app...@googlegroups.com
基本的にはその方法になると思います。
ただ行に対して検索をかけたいという意味であれば、
直接SpreadsheetAppを利用せず、Spreadsheet APIのList Feedを利用して
検索するという方法があります。

一応僕の方でそのGASのライブラリを作っているので、
近いことは実現できるかなーと思います。


masakih

unread,
Oct 25, 2013, 12:22:50 AM10/25/13
to google-app...@googlegroups.com
ご紹介ありがとうございます。
早速、ライブラリを取り込んで利用させていただきました。
これは大変便利ですね!
常々、こういうことができないものかと考えておりました。
是非活用させていただきたいと思います。

ありがとうございました。
Reply all
Reply to author
Forward
0 new messages