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

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

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

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

Q&A

解決済

2回答

477閲覧

【GAS】二次元配列のなかに含まれる空白を取り除き、特定の文字列に一致する行を別シートに記載したい

ai39

総合スコア7

Google Apps Script

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

0グッド

0クリップ

投稿2023/01/12 12:56

実現したいこと

複数列・行のデータを取得し、
二次元配列のなかに含まれる空白を取り除き、特定の文字列に一致する行を別シートに記載したい

イメージ説明

具体的には、A2:F6列までデータを取得し、F列に「完了」とある行だけ
シート2へ記載するようにしたいです。

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

エラーメッセージはないですが、うまく取得できないです。

該当のソースコード

function

1 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getSheetByName('シート1'); 4 5 key = "完了" 6 7 var range = sheet.getRange(2, 1, sheet.getLastRow(), 5).getValues().flat(); 8 range.filter(r => r[0]) 9Logger.log(range) 10 11 var kanryo = adminKeysToCheck.includes(key); 12 13 Logger.log(kanryo) 14 15} 16

試したこと

ネットで配列内の空白を削除する、というのがあったので、
試しましたがうまく動きませんでした

var range = sheet.getRange(2, 1, sheet.getLastRow(), 5).getValues().flat(); var arr = [] arr.push(range) var array = arr.filter(r => r[0])

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

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

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/01/12 14:11 編集

削除
guest

回答2

0

こんな感じでいかがでしょうか?

javascript

1function writeCompletedTasks() { 2 const ss = SpreadsheetApp.getActiveSpreadsheet(); // スプシを取得 3 const originalSheet = ss.getActiveSheet(); // 現在開いているシートを取得 4 const completedTasks = originalSheet.getDataRange().getValues().filter(arr => arr[5] === '完了').map(arr => arr.slice(0, -1)); // 「完了」の行だけ取得 5 // [ 6 // [ '田中', '○', Sat Jan 01 2022 00:00:00 GMT+0900 (Japan Standard Time), '○', Sat Jan 01 2022 00:00:00 GMT+0900 (Japan Standard Time) ], 7 // [ '佐藤', '○', Mon Jan 03 2022 00:00:00 GMT+0900 (Japan Standard Time), '', Mon Jan 03 2022 00:00:00 GMT+0900 (Japan Standard Time) ] 8 // ] 9 10 if (!completedTasks.length) return; // 該当0件の場合、ここで処理を終了(以降の行は実行されない) 11 12 const compSheet = ss.getSheetByName('Sheet2'); // 「Sheet2」を取得 13 compSheet.getRange(2, 1, completedTasks.length, completedTasks[0].length).setValues(completedTasks); // 2行目以降に、情報を転記 14}

投稿2023/01/12 15:20

編集2023/01/12 17:01
Cocode

総合スコア2314

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

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

ai39

2023/01/12 15:31

ありがとうございます! 教えていただいた方法でも無事動かすことができました! もしご存知であれば教えていただきたいのですが 仮に、F列に「完了」があるA~E列のみ記載することは可能なのでしょうか。。
Cocode

2023/01/12 17:03

修正しました。.sliceでA〜E列の値のみに絞ることが可能です。 基本的に他の回答者様と同じ内容なので、どちらを選んでいただいても差し支えないです。 (処理方法が全く同じなので、処理速度の差もありませんのでご安心ください)
ai39

2023/01/13 12:51

ご回答ありがとうございます! とても助かりました!! ベストアンサーを選ぶのがとても心苦しいのですが、早く回答いただいたqnoir様にさせていただきました...!
guest

0

ベストアンサー

シート1でF列が「完了」となっている行を、F列を除いて、シート2の2行目以降にコピーする例です。

js

1function main() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getSheetByName('シート1'); 4 5 var key = '完了'; 6 var range = sheet.getRange(2, 1, sheet.getLastRow(), 6).getValues(); 7 // var kanryo = range.filter(r => r[5] === key) 8 // F列を除外するように修正 9 var kanryo = range.filter(r => r[5] === key).map(r => r.slice(0, -1)) 10 writeDataToNewSheet_(kanryo) 11 12} 13 14function writeDataToNewSheet_(values) { 15 if (!values.length) return; 16 var ss = SpreadsheetApp.getActiveSpreadsheet(); 17 var sheet2 = ss.getSheetByName('シート2'); 18 if (sheet2 == null) { 19 console.log('エラー:シート2が存在しません。終了します。'); 20 return; 21 } 22 sheet2.getRange(2, 1, values.length, values[0].length).setValues(values); 23}

投稿2023/01/12 14:11

編集2023/01/12 16:10
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ai39

2023/01/12 15:23

ありがとうございます! 無事動かすことができました! もしご存知であれば教えていただきたいのですが 仮に、F列に「完了」があるA~E列のみ記載することは可能なのでしょうか。。
退会済みユーザー

退会済みユーザー

2023/01/12 16:07

修正しました。(9行目)
ai39

2023/01/13 12:49

ご回答ありがとうございます! とても助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問