teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

補足を追加

2020/07/17 03:25

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  なお、「フィルターで隠されていない範囲」には、1行目の見出しも含まれてしまうので、シートAの1行目に見出しがあるのであれば、filterの抽出条件に`i > 1`を加えて見出しを対象外にする必要があるでしょう。見出しがなくて1行目からデータが並んでいるなら`i > 1 &&`の部分は不要です。
6
6
 
7
+ 修正: 自己解決したようですが、フィルターにマッチするデータがなかった場合の処理を追加します。
8
+
7
9
  ```GAS
8
10
  function myFunction() {
9
11
  const ss = SpreadsheetApp.getActiveSpreadsheet();
@@ -12,6 +14,8 @@
12
14
  var criteria = SpreadsheetApp.newFilterCriteria().whenTextContains('hoge2').build();
13
15
  sheet.getFilter().setColumnFilterCriteria(sheet.getActiveRange().getColumn(), criteria);
14
16
  var values = sheet.getDataRange().getValues().filter(function(_, i) {return i > 1 && !sheet.isRowHiddenByFilter(i + 1)})
17
+ if (values.length > 0) {
15
- sheetT1.getRange(sheetT1.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
18
+ sheetT1.getRange(sheetT1.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
19
+ }
16
20
  }
17
21
  ```

1

補足を追加

2020/07/17 03:25

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  `values.length`でvaluesの行数、`values[0].length`でvaluesの(1行目の)列数を取得できますから、getRange()にそれらを指定します。
4
4
 
5
- なお、「フィルターで隠されていない範囲」には、1行目の見出し含まれてしまうので、filterの抽出条件に`i > 1`を加えて見出しを対象外にする必要があるでしょう。
5
+ なお、「フィルターで隠されていない範囲」には、1行目の見出し含まれてしまうので、シートAの1行目に見出しがあるのであれば、filterの抽出条件に`i > 1`を加えて見出しを対象外にする必要があるでしょう。見出しがなくて1行目からデータが並んでいるなら`i > 1 &&`の部分は不要です。
6
6
 
7
7
  ```GAS
8
8
  function myFunction() {