質問: sheet.getDataRange().getValues().filter(function(_, i) {return !sheet.isRowHiddenByFilter(i + 1)}) sheetT1.getRange(sheetT1.getLastRow()+1,1,19,20).setValues(values);
回答: 提示されたコードには取得部分が含まれていませんが、説明の「シートA」を`sheet`として取得済みだとして説明します。 `values.length`でvaluesの行数、`values[0].length`でvaluesの(1行目の)列数を取得できますから、getRange()にそれらを指定します。 なお、「フィルターで隠されていない範囲」には、1行目の見出しも含まれてしまうので、シートAの1行目に見出しがあるのであれば、filterの抽出条件に`i > 1`を加えて見出しを対象外にする必要があるでしょう。見出しがなくて1行目からデータが並んでいるなら`i > 1 &&`の部分は不要です。 修正: 自己解決したようですが、フィルターにマッチするデータがなかった場合の処理を追加します。 ``` function myFunction() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('シートA'); const sheetT1 = ss.getSheetByName('シートB'); var criteria = SpreadsheetApp.newFilterCriteria().whenTextContains('hoge2').build(); sheet.getFilter().setColumnFilterCriteria(sheet.getActiveRange().getColumn(), criteria); var values = sheet.getDataRange().getValues().filter(function(_, i) {return i > 1 && !sheet.isRowHiddenByFilter(i + 1)}) if (values.length > 0) { sheetT1.getRange(sheetT1.getLastRow() + 1, 1, values.length, values[0].length).setValues(values); } } ```