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

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

3073閲覧

GASのforeach文において、特定の条件において特定のセルを削除したい

AmiDeer

総合スコア5

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2021/04/22 06:48

前提・実現したいこと

スプレッドシートのD列に値が入力されていて、かつE列に何らかの値が入力されている場合、E列の値を削除する

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

Google Apps Scriptで指定時刻にメールを送信するシステムを作ってみた

こちらに掲載の自動メール送信のコードをコピペし、
追加でsend_timeが空欄かつsent_timeに日付が入力されている場合のみsent_timeを削除するプログラムを書きました。(elseif文)
しかし下記の通りD列の記述においてエラーが発生しております。

15:26:11 エラー
TypeError: value[3].isBlank is not a function
(匿名) @ コード.gs:14
calledByCron @ コード.gs:8

該当のソースコード

GAS

1function calledByCron() { 2 var sheet = SpreadsheetApp.getActiveSheet(); // シートの取得 3 var startRows = 2; // 開始行数 4 var sheetData = sheet.getSheetValues(startRows, 1, sheet.getLastRow(), sheet.getLastColumn()); // シートのデータを取得(2次元配列) 5 var dtLimit = new Date(); // 現在時刻を取得 6 7 // シートの各行ごとにデータを取り出す 8 sheetData.forEach(function(value, index) { 9 // 送信完了していない、かつ送信予定日時が現在時刻より前ならば、メールを送信する 10 if (!value[4] && (new Date(value[3])).getTime() < dtLimit.getTime()) { 11 MailApp.sendEmail(value[0], value[1], value[2]); // メールを送信する 12 sheet.getRange(startRows + index, 4 + 1).setValue(dtLimit); // 送信完了日時をシートに書く 13 } 14 // D列に日時(値)が入力されておらず、かつE列に日時(何らかの値)が入力されている場合、E列の値を削除する(問題部分) 15 else if ( value[3].isBlank() && !value[4].isBlank()) { 16 sheet.getRange(startRows + index, 4 + 1).clearContent(); 17 } 18 }); 19}

どなたか解決方法をご教示ください。
宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

isBlank()はRangeに使うメソッドなので、getSheetValuesで取得した配列の要素(中身の値)があるかないかには使えないのでエラーになってるのかと。

参照元のサイトと同じように、単に value[3] && !value[4] としてみてはどうでしょうか。

isBlank()
https://developers.google.com/apps-script/reference/spreadsheet/range#isBlank()


修正

value[3]に値が入っていない場合かつvalue[4]に値が入っている場合

とのことなので逆でした。失礼しました。
!value[3] && value[4]

投稿2021/04/23 00:51

編集2021/04/23 02:57
sawa

総合スコア3002

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

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

AmiDeer

2021/04/23 02:12

ご回答ありがとうございます。 isBlack()はRangeに使うメソッドでしたね…!ご教示ありがとうございます。 value[3] && !value[4] とのことですが、条件式が「value[3]に値が入っていない場合かつvalue[4]に値が入っている場合」になるので、!value[3] && value[4]ということで間違いないでしょうか? 前提・実現したいことの内容が間違っており申し訳ございません。
sawa

2021/04/23 02:58

すいません、逆でしたね。ご認識の通りです。 修正しました。
AmiDeer

2021/04/23 03:05

ご丁寧にありがとうございます!問題なく実装されました。大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問