質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1495閲覧

GASとスプレッドシートを用いたData Visualization (Mapping)について

tshmd

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/07/17 22:34

編集2021/07/17 23:51

前提・実現したいこと

Google App Scriptとスプレッドシートを使ってアニメーション(マッピング)を作成したいです。

そのために、下記(1)(2)を実施したいです。

######(1) GAS側で実施したいこと
GAS側では、任意のSheetのA2セルに、特定の日付(たとえば7/1)から始めて、7日後(たとえば7/8)までの各日付を3秒毎に書き込んでは更新するプログラムを書きたいです。

たとえば、人間がスプレッドシートを見た際に
7/1を3秒間表示→7/2を3秒表示→7/3を3秒間表示→7/4を3秒間表示→7/5を3秒間表示→7/6を3秒間表示→7/7を3秒間表示→7/8を3秒間表示
と表示させるようにしたいです。

スプレッドシート上のボタンを押すと、GASを実行できるようにしようと思っています。

######(2) スプレッドシート側で実施したいこと
一方、スプレッドシート側では、3秒毎に更新されるA2セルを読み込むことで同じFile別Sheetにあるデータからの集計値を表示したり、集計値に基づいて条件付き書式で色をつけることによってアニメーションに見せかけたいと思っています。

発生している問題・エラーメッセージ

(2)については問題ありませんが、(1)を実行すると
約25秒後に7/8がA2セルに入力されます。

setValueが都度行われてスプレッドシートが更新されるのではなく、すべての計算が終わったあとで最後の結果のみが入力されてしまっています。
(1)を実現するためにはどのようにすればうまくいくでしょうか?

この方法にはこだわっておらず、別の方法でも良いのでどなたか教えていただけますと幸いです。
※スプレッドシート上に日付とともにいくつかのデータが入っており、今後もデータが増えて行く予定なので、できればGASとスプレッドシートを使用したいですが、アニメーションのように動けば他のツールでも問題ありません。今後もデータが増えるので、スクリーンショットを何枚も取ったり今後手間が増えていく方法は避けたいと思っています。
※実際のデータは公開できませんが、データの一部にはロケーションに関するものが入っています。ロケーションのマップを描いていて、その中の数字と色が日毎に変化していくような形で可視化したいです。

該当のソースコード

gas

1function myFunction() { 2 3 var bk = SpreadsheetApp.getActiveSpreadsheet(); 4 var sh = bk.getSheetByName('Mapping'); 5 var date = new Date("6/1"); 6 var staySecond=3; 7 8 for (var i=0; i<7; i++){ 9 var newDate = new Date(date.getYear(), date.getMonth(), date.getDate()+i); 10 sh.getRange('A2').setValue(Utilities.formatDate(newDate, "JST", "MM/dd")); 11 Logger.log(Utilities.formatDate(newDate, "JST", "MM/dd")); 12 Utilities.sleep(staySecond*1000); 13 } 14}

下記のログは得ることができています。

Execution log 6:13:06 PM Notice Execution started 6:13:04 PM Info 06/02 6:13:07 PM Info 06/03 6:13:11 PM Info 06/04 6:13:14 PM Info 06/05 6:13:17 PM Info 06/06 6:13:20 PM Info 06/07 6:13:23 PM Info 06/08 6:13:28 PM Notice Execution completed

補足情報(FW/ツールのバージョンなど)

使用しているGoogle Chromeは下記ですが、本件ではあまり関係ないのかな?と思います。
Version 90.0.4430.93 (Official Build) (x86_64)

画面は下記のようなイメージです。場所ごとに数字や色が変わるようにしたいです。
イメージ説明

困っているので、どなたか教えていただけますと幸いです。よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

sh.getRange('A2').setValue(Utilities.formatDate(newDate, "JST", "MM/dd"));

の直後に

SpreadsheetApp.flush();

を入れることで、すぐ反映されるようになると思います。

投稿2021/07/18 00:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tshmd

2021/07/18 00:25

解決しました! 分からずにしばらく時間がかかっていたので大変助かりました。 ご回答いただき、誠にありがとうございます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問