Google Apps Scriptでフィルター表示中のデータだけ取得する方法

フィルター表示中のデータだけ取得

Google Apps Scriptを使用すればセル内のデータの値を簡単に取得できる。

例えばA列とB列の1行目を除く値をすべて取得したい場合は以下のように範囲を指定してgetValues()を使えば取得できる。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const sheet = ss.getActiveSheet()
  const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn())
  const data = range.getValues()
  console.log(data)
  // [ [ 1, 'sato' ], [ 2, 'tanaka' ], [ 3, 'yamada' ] ]
}

一般的によく利用されるセル内のデータ取得の処理だが1点大きな問題がある。

それはフィルターでセルが非表示の状態でも値が取得可能なことだ。

※ フィルターで非表示中のセルも取得したい場合は別。

Google Apps Scriptでフィルター表示中のデータだけ取得する方法

sheet.isRowHiddenByFilter()で判定

sheet.isRowHiddenByFilter(行数)を使用すれば指定した行がフィルターにより非表示になっているか判定できるためfilter()を使用して表示されているセルのみに絞り込めば非表示のセルの値を取り込まない。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const sheet = ss.getActiveSheet()
  const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn())
  const data = range.getValues().filter((v, i) => {
    if (!sheet.isRowHiddenByFilter(i + 2)) {
      return v
    }
  })
  console.log(data)
  // [ [ 1, 'sato' ], [ 3, 'yamada' ] ]
}

フィルター表示中のデータだけ取得する方法のシート