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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

960閲覧

【GAS】getrange,getvalueで取得した情報を指定の位置に表示したい

Elly_

総合スコア11

Google スプレッドシート

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

Google Apps Script

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

0グッド

1クリップ

投稿2021/07/30 06:22

編集2021/07/30 10:27

前提・実現したいこと

毎朝更新されるTodoリストを作成しようとしています。
→時間をトリガーとして、進捗状況が「完了」のタスクは行ごと削除、
継続・ルーチンワーク(I列が○のもの)は進捗状況のみリセットして「待機中」とする。

具体的には、
前日シートのI列に「○」がある場合、翌日新しいシートのB列に「待機中」と表示
同様に「×」の場合、「完了」と表示。
B列に完了と表示された行は削除する。となるように設定しようとしています。

しかし、毎回H列に「待機中」と反映されてしまいます。
イメージ説明

該当のソースコード

// 本日のTODOを作成する function addTodoSheet() { // 前日からコピーする const ss = SpreadsheetApp.getActiveSpreadsheet(); const yesterday = getYesterdayYMD() const today = getNowYMD() const sh = ss.getSheetByName(yesterday) sh.copyTo(ss).setName(today) const todaySheet = ss.getSheetByName(today) ss.setActiveSheet(todaySheet) ss.moveActiveSheet(1) ss.setActiveSheet(todaySheet) // TODOを初期化する const lastRow = sh.getLastRow(); const nsh = ss.getActiveSheet(); for(let i = 1; i <= lastRow; i++) { if( nsh.getRange(i, 9).getValue() == "○" ){ nsh.getRange(i, 8).setValue("待機中") } else if (nsh.getRange(i, 9).getValue() == "×" ){ nsh.getRange(i, 8).setValue("完了") } } for(let i = lastRow; i >= 1; i--) { if( nsh.getRange(i, 8).getValue() == "完了" ){ nsh.deleteRows(i); } } } // yyyymmdd形式で日付を取得する function getNowYMD(){ const dt = new Date(); const y = dt.getFullYear(); const m = ("00" + (dt.getMonth()+1)).slice(-2); const d = ("00" + dt.getDate()).slice(-2); const result = m + d; return result; } // yyyymmdd形式で日付を取得する function getYesterdayYMD(){ const dt = new Date(); dt.setDate(dt.getDate() - 1); const y = dt.getFullYear(); const m = ("00" + (dt.getMonth()+1)).slice(-2); const d = ("00" + (dt.getDate())).slice(-2); const result = m + d; return result; } // スプレッドシートのメニューからPDF作成用の関数を実行出来るように、「スクリプト」というメニューを追加。 function onOpen() { const sheet = SpreadsheetApp.getActiveSpreadsheet(); const entries = [ { name : "TODO作成", functionName : "addTodoSheet" }, ]; sheet.addMenu("スクリプト", entries); };

試したこと

(i, 8)の指定が間違っているのではないかと思い、(i, 2)に変更しましたが関係ないようでした。

補足情報

GAS初心者のため、ほかの方が公開しているテンプレートをアレンジしようと思い進めている状況です。
元のテンプレートではそもそもH列が進捗状況の列になっていたので、
このようなソースになっていると考えています。

どうぞよろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/07/30 07:33

shが前日シート、nshが当日のシートでしょうか? 可能な限り全部のコードを掲載していただいたほうがわかりやすいのですが。
Elly_

2021/07/30 10:27

ご指摘ありがとうございます。コードをすべて記載させていただきました。
guest

回答1

0

ベストアンサー

特におかしい点は見当たりませんでしたが、コードに書いてある"○"と、スプレッドシートに記入してある"○"が
本当に同じ文字かどうか、今一度確認してみてはいかがでしょうか。
(確認するというよりも、スプレッドシートに記入してある"○"をコピーして、コードの方に貼り付けた方が速いかもしれません。)
同じ○に見えても、別の文字だと一致判定でfalseになります。


追記:
質問文が正しいという前提で
「前日シートのI列に「○」がある場合、翌日新しいシートの**(H列ではなく)B列**に「待機中」と表示
同様に「×」の場合、(B列に)「完了」と表示。
(H列ではなく)B列に完了と表示された行は削除する」場合は下記のコードになります。

function addTodoSheet() { (略) for(let i = 1; i <= lastRow; i++) { Logger.log(nsh.getRange(i, 9).getValue()) if( nsh.getRange(i, 9).getValue() == "○" ){ nsh.getRange(i, 2).setValue("待機中") // B列に待機中と表示 } else if (nsh.getRange(i, 9).getValue() == "×" ){ nsh.getRange(i, 2).setValue("完了") // B列に完了と表示 } } for(let i = lastRow; i >= 1; i--) { // B列が完了ならば行削除 if( nsh.getRange(i, 2).getValue() == "完了" ){ nsh.deleteRows(i); } } }

投稿2021/07/30 10:53

編集2021/07/30 11:23
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Elly_

2021/07/30 11:09

ありがとうございます。 コードに書いてある"○"と、スプレッドシートに記入してある"○"は一致していました。 実際I列が「○」の時にB列に「待機中」という文字を返したいのですが、 やはり難しいでしょうか。
退会済みユーザー

退会済みユーザー

2021/07/30 11:22

追記しました。
Elly_

2021/07/30 11:33

何度もありがとうございます。 やはり(i, 8)→(i, 2)ですよね。 I列が×の時にH列に一瞬「完了」と表示されて、新しいシートではその行が削除されてはいるのですが、 それをH列ではなくB列で行いたいのになぜか反映されないままです。
Elly_

2021/07/30 11:35 編集

スクリプト画面で上書き保存を行ったら反映されました! 初歩的なミスで大変申し訳ありません。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問