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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

1755閲覧

【gas】exact関数で文字列比較した結果の取得について

sys

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/03/07 02:31

編集2022/03/07 18:43

シートにてexact関数で文字列判定しtrue,falseを表示しています。
その表示結果をgasで
・getDataRange().getDisplayValues()
・getDataRange().getValues()
のいづれで取得してもtureの値がすべてfalseで入ってきます。

テスト的に
直接セルにたいしてTRUEと文字入力をしたものはそのまま期待した文字列(TRUE)が取得できてはいます。

正確に情報を取得するにはどのような手段がありますか??

すみません、コードと画像を追記します。(D列usernameとI列に入ってくる文字列判定をしております)
D列usernameとI列に入ってくる文字列判定をしております

// 最終行取得 var lr = slack_sheet.getLastRow(); // 初期化 //if (lr > 2) sh.getRange(2,1,lr-2,sh.getLastColumn()).clear(); if (lr > 2) slack_sheet.getRange(2,1,lr-2,5).clear(); // 出てきそうな項目名を予め列挙しておく(この辺は必要に応じて加減すればよいでしょう) var item = [ "user", "text", "type", "username", "ts" ]; // 2次元配列化 var ary = []; var ary2 = []; for (var i=0; i<data.messages.matches.length; i++) { for (var j=0; j<item.length; j++) { ary.push(data.messages.matches[i][item[j]]); // もしundefinedなら空欄に直す if (!ary[j]) { ary[j] = ""; } } //配列の中身を一行ごとにした ary2.push(ary); ary = []; } //console.log(ary2); // スプレッドシートに転記 //日付 log_sheet.getRange(1,1).setValue(Utilities.formatDate(date, 'Asia/Tokyo', 'yyyyMMdd')); //取得した配列を転記(useridから) slack_sheet.getRange(2,1,ary2.length,item.length).setValues(ary2); **SpreadsheetApp.flush(); //リザルトシートの結果を格納 //var result_vals = result_sheet.getDataRange().getValues(); var result_vals = result_sheet.getDataRange().getDisplayValues().slice(1); console.log(result_vals); //console.log(result_vals[2][0]); //console.log(result_vals[2][1]); Logger.log(Object.prototype.toString.call(result_vals[2][0])); Logger.log(Object.prototype.toString.call(result_vals[2][1]));** var good_member = ''; var bad_member = ''; for (var i=0; i<result_vals.length; i++) { //ユーザー名が空じゃなくて二カラム目がfalseならgoodmember if (result_vals[i][0] !== '' && result_vals[i][1] == 'FALSE') { bad_member = bad_member + result_vals[i][0] + ", "; } else if (result_vals[i][0] !== '' && result_vals[i][1] == 'TRUE') { good_member = good_member + result_vals[i][0] + ", "; } } コード

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

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

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

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

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

gas.engine

2022/03/07 06:24

確認したところexact関数のtrueを正常に取得できました。 1.説明文中にtrueとtureが混在していますが、実際のコードはどうなっていますか? 2.getValuesは二次元配列を返しますが、getValueでやってみたらどうなりますか? 3.最小限のコードでサンプルを上げてください
sys

2022/03/07 07:08

1.説明文中にtrueとtureが混在していますが、実際のコードはどうなっていますか? →質問の際にtrueで入力してしまっておりますが、tureが正しいですすみません。 2.getValuesは二次元配列を返しますが、getValueでやってみたらどうなりますか? →二次元配列を取得するので大丈夫かと思いますがこちら明日ためしてみます。ありがとうございます。 3.最小限のコードでサンプルを上げてください →編集をして、シートのキャプチャとgasのコートを記載致しました。 情報が不足しており、申し訳ありません。
guest

回答1

0

ベストアンサー

気になった点は、
1
> //ユーザー名が空じゃなくて二カラム目がfalseならgoodmember
コードではbad_memberを追加しています。
コメントかコードのどちらかがおかしいです。

2
result_vals[i][1]は、i行目のB列の値になります。
J列の場合、result_vals[i][9]にtrue/falseの情報が格納されます。
Logger.log(result_vals)で中身が見れるので確認してください。

getDataRangeの範囲指定をした場合、ざっくりと自動的にデータが埋まってるセルの外枠が範囲になるので、
A1~J10までの範囲をgetValuesで二次元配列で取得しています。

I列、J列だけの範囲を指定するのなら、getRangeで指定する必要があります。

投稿2022/03/07 09:43

gas.engine

総合スコア608

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問