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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

1421閲覧

【GAS】スプレッドシートの特定の範囲を読み込んで、条件に合致するセルを出力したいのですが、おそらく条件式が誤っており、上手く出力されません。

tanaka_444

総合スコア19

Google スプレッドシート

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

Google Apps Script

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

0グッド

1クリップ

投稿2021/08/27 12:24

前提・実現したいこと

以下のスプレッドシートの、
O列~Q列を読み込み、「もし、O列が空白でない、かつ、P列が「送信可能」の文字が入力されている、かつ、Q列が空白」
であれば、その行のO列の内容をログに書きだす
というプログラムを作成しています。

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

以下の画像の場合、上記の条件が10行目になるので、o列に記載の「a」をログに出力されるはずなのですが、
ログには実行のみで何も出力されません。

if文内の以下条件式が誤っているかと思うのですが、
どこが間違えているか分からないため、教えていただけますでしょうか?
よろしくお願いします。

//O列が空白ではない、かつ、P列が「送信可能」と入力されている、かつ、Q列が空白の場合
if(anser!==null && send=="送信可能" && cell==null)

{

//ログでanserの内容を出力
Logger.log(anser);

}

イメージ説明

該当のソースコード

function onEdit(e) {

//アクティブなスプレッドシートを取得
var ss = SpreadsheetApp.getActiveSpreadsheet();

//アクティブなシートを取得
var sh = ss.getActiveSheet();

var lastRow = sh.getLastRow();

var lastColumn = sh.getLastColumn();

//スプレッドシートの、O2~Q14の値をgetValuesで取得
var table = sh.getRange(2,15,14,3).getValues();

 //2行目~14行目までを読み込み
for(var i=2; i<=14; i++)
{

//O列を定義
var anser = sh.getRange(i,1);

//P列を定義
var send = sh.getRange(i,2);

//Q列を定義
var cell = sh.getRange(i,3);

//O列が空白ではない、かつ、P列が「送信可能」と入力されている、かつ、Q列が空白の場合
if(anser!==null && send=="送信可能" && cell==null)

{

//ログでanserの内容を出力
Logger.log(anser);

}

}

}

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

セルの内容が空かどうかや、特定の文字列(送信可能)と比較するには、getRangeで得られるRangeオブジェクトそのものではなく、getRange.getValuesで得られる値と比較してください。

あなたの書いたコードでは、比較に使うセル範囲の値が、あらかじめ二次元配列tableに読み込まれています。

GAS

1var table = sh.getRange(2, 15, 14, 3).getValues();

ですから、for文の中では、tableの要素を使って比較を行なえばいいでしょう。

GAS

1 for (var i = 2; i <= 14; i++) { 2 var answer = table[i - 2][0]; 3 var send = table[i - 2][1]; 4 var cell = table[i - 2][2]; 5 //O列が空白ではない、かつ、P列が「送信可能」と入力されている、かつ、Q列が空白の場合 6 if (answer !== "" && send === "送信可能" && cell === "") { 7 //ログでanswerの内容を出力 8 Logger.log(answer); 9 }

配列には指定したセル範囲の値だけが格納されているため、O2セルの値はtable[0][0]、P2セルの値はtable[0][1]、Q2セルの値はtable[0][2]で得られます。

空白かどうかは(nullではなく)""との等値比較で行なってください。

投稿2021/08/27 13:05

編集2021/08/27 13:08
Daregada

総合スコア11990

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

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

tanaka_444

2021/08/29 06:55

ありがとうございます! ご回答いただいた内容で、上手く実装できました。 助かりました。ありがとうございますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問