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

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

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

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

Q&A

解決済

2回答

353閲覧

スプレッドシートから取得した二次元配列のうち条件に合うものだけを抽出して配列に入れたい

_af28_

総合スコア18

Google Apps Script

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

0グッド

0クリップ

投稿2018/10/26 10:30

編集2018/10/27 09:53

前提・実現したいこと

初歩的な質問を申し訳ございません…
SSから配列を取得し、条件にあるものだけを抽出したいです。
具体的には日付と判定フラグの列を取得し、判定フラグでOKになっている日付だけを抽出したいです。
(例のスプレッドシート内、2018/10/27 9:30:00、2018/10/27 11:00:00とログに表示されることが目的です)

現在はログに入れておりますが、別工程にて配列をSSに反映させます。

###スプレッドシート

日付判定フラグ
2018/10/27 9:00:00-
2018/10/27 9:30:00OK
2018/10/27 10:00:00-
2018/10/27 10:30:00-
2018/10/27 11:00:00OK
2018/10/27 11:30:00-

現在のコード

function cehck(){ var ss = SpreadsheetApp.openById('XXXXXXXXX'); //貼り付け先SSを指定 var sheet_ss = ss.getSheetByName('check_sheet'); //タブ名 var data = sheet_ss.getRange(2, 1, sheet_ss.getLastRow() - 1).getValues(); Logger.log(data); }

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

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

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

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

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

papinianus

2018/10/26 11:21

これ動きますか?抽出は何を抽出するのですか?行をまるごとですか?日付ですか?行番号ですか?配列に入れてログに出して終わりですか?後から日付の比較ができないという質問が出そうなのですが?
_af28_

2018/10/27 09:56

曖昧に記載し、申し訳ございません。追記いたしました通り、OKのフラグがたっているA列の日付をログに入れたいと考えております。別工程にて配列をSSに反映予定です。日付の比較実施予定はございません。
guest

回答2

0

ベストアンサー

書き方いろいろ。やってることは同じです。

GAS

1var data = sheet_ss.getRange(2, 1, sheet_ss.getLastRow() - 1, 2).getValues(); 2 3// forEach 4var ok = []; data.forEach(function(e){if (e[1] === "OK") {ok.push(e[0])}}) 5 6// filter + map 7var ok = data.filter(function(e){return e[1] === "OK"}).map(function(e){return e[0]}) 8 9// reduce 10var ok = data.reduce(function(a,v) {return v[1] === "OK" ? a.concat(v[0]) : a}, []) 11 12Logger.log(ok); 13 14// GASはES6対応していないのでアロー関数は使えません

投稿2018/10/28 09:52

shozi3

総合スコア691

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

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

0

下記で動きましたが、もっとうまく書く方法がありそうな…

var ss = SpreadsheetApp.openById('XXXXXXXXX');  var sheet_ss = ss.getSheetByName('check_sheet'); //タブ名 var data=[]; //最終行まで繰り返す for (var i = 3 ; i<sheet_ss.getLastRow();i++) { //B列がOKのものだけ配列に格納する var check = sheet_ss.getRange(i,2).getValue(); if(check === "OK"){    var data_in = sheet_ss.getRange(i,1).getValue();     data.push(data_in); } } }

投稿2018/10/27 09:49

_af28_

総合スコア18

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

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

macaron_xxx

2018/10/29 02:16 編集

この書き方だと最終行は参照できていないです。 i<=sheet_ss.getLastRow()ですね。 しかし、そもそもループの中でgetLastRowやgetRange,getValueなどは避けたほうがよいです。 他の方の回答を参照してください。
_af28_

2018/10/30 10:11

頻発の注意喚起が出ておりました…ベストアンサーの方を参照させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問