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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

Q&A

1回答

1349閲覧

GASを使用して疑似的にVLOOKUPを複数要素に適用したいです。

mokou

総合スコア4

Google Apps Script

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

0グッド

1クリップ

投稿2019/08/19 10:40

前提・実現したいこと

GASを使用して社用のタイムカードを回収したかどうかを自動で通知するシステムを
作成しようとしております。
スプレッドシートのA列に名前、B列にチェックボックス、D列にはIF関数で
A列が空白ではない、かつB列チェックボックスにチェックがついていればtrue,
A列が空白でない、かつB列チェックボックスにチェックがついていない場合false,
A列が空白の場合空白にするように作成しております。

最終的にはスプレッドシートD列のfalseの数を一次元配列として取得して
それと同じ行のA列(名前)をGmailで通知するシステムにしたいのですが
D列のfalseに対応するA列の値を取得する機能を実装中に
indexOfを使うと最初のものしか取得できず、for文で繰り返すと
単純にlength分繰り返す処理となってしまい行き詰ってしまいました。

該当のソースコード

function myFunction() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//勤務表回収スプレッドシートを取得する変数を宣言 var hirabayashi = spreadsheet.getSheetByName("平林");//平林のシートを取得 var rangeKouki = hirabayashi.getDataRange().getValues();//平林のシートにある全データを取得 var rangeD = hirabayashi.getRange(1,4,hirabayashi.getLastRow()).getValues();//D列の情報を取得 rangeD = Array.prototype.concat.apply([],rangeD);//変数rangeDを一次元配列にする Logger.log(rangeD); var mikaisyuu = rangeD.reduce(function(accumulator,currentValue,index){ if (currentValue === false ){ accumulator.push(index); } return accumulator; },[])//変数rangeDの中のfalseの行番号を返す。 Logger.log(mikaisyuu); for( var i=1;i<=mikaisyuu.length;i++){ Logger.log(rangeKouki[i][0]); }//falseの行に対応した稼働者名をログ出力させる }

試したこと

ネットで諸々取得した複数要素に対応する行をさらに取得する方法を調べたのですが
これと言ったものがでてこず、行き詰っております。

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

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

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

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

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

guest

回答1

0

javascript

1function myFunction() { 2 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//勤務表回収スプレッドシートを取得する変数を宣言 3 4 var hirabayashi = spreadsheet.getSheetByName("平林");//平林のシートを取得 5 var rangeKouki = hirabayashi.getDataRange().getValues().filter(function(e){return e[0]!=="" && e[1] === false;}).map(function(e){return e[0];}); 6

投稿2019/08/19 22:26

編集2019/09/12 05:35
papinianus

総合スコア12705

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

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

mokou

2019/08/20 00:17

回答頂き有難う御座いました。すみません。こちらログ出力をすると[]と出力されてしまい、うまくいきませんでした。。
sawa

2019/08/22 00:00 編集

"False" のとこを false に直せばよいかなと。"でくくらなくてOK
papinianus

2019/09/11 16:08

チェックボックスってboolでしたっけ? onEditのe.valueだと、文字になるのですが。
macaron_xxx

2019/09/12 00:36

getValue()はセルの値に応じたオブジェクトを返します。 >The value may be of type Number, Boolean, Date, or String depending on the value of the cell. e.valueはセルの値を返します。 そのため、getValue()とe.valueの返り値は異なります。 これは日付型などで試してみるとわかりやすいです。
papinianus

2019/09/12 05:34

自分で確認すべきところお二方のご意見をいただいてありがとうございます。 > そのため、getValue()とe.valueの返り値は異なります。 > これは日付型などで試してみるとわかりやすいです。 google さんは好きなサービスですが、さすがにこれは仕様に疑問がありますねー。ドキュメンテッドだとはいえ。日付の罠は永久に気付かなかったと思います。助かります。
papinianus

2019/09/12 05:35

修正しました。ただこれなんでこんなブツ切りコードなのかもう記憶にないです。申し訳ないです > 質問者さま
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問