スプレッドシート フィルターで表示されているセルだけ取得したい!Google App Script [GAS]

スプレッドシートのセルの値を取得することはできるようになったものの、フィルターをかけた後の値はどうやって取得するのだろうと思ったのでまとめました。

やりたいこと

例えばいくつかの見出しがあるスプレッドシートがあるとします。

そしてそのスプレッドシートの見出しカテゴリをBだけでフィルターをかけたとします。

このフィルター後の結果だけ取得するのが今回のやりたいことです。

フィルターで表示されている行の値を全て取得

以下サンプルコードです。いろいろ確認しましたがisRowHiddenByFilter()を使って取得するのが一般的なようです。

function myFunction() {
    let mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート2');
    const range = mySheet.getRange(2, 1, mySheet.getLastRow() - 1, mySheet.getLastColumn())
    const data = range.getValues().filter((v, i) => {
        if (!mySheet.isRowHiddenByFilter(i + 2)) {
            return v
        }
    })
    console.log(data);
}

結果

[ [ 'https://programmer-life.work/java/numberformatexception', 'Java1', 'B' ],
[ 'https://programmer-life.work/java/show-array', 'Java3', 'B' ] ]

おわり

シートIDなどを使って取得する方法も見かけましたが今回は使う予定がないので見送りました。

便利な関数がGASには用意されてるんですね、GASでフィルターをかけることも可能なようでまだまだ勉強することが多そうです。

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