スプレッドシートのフィルタが更新されない!
スプレッドシートのフィルタを使用してる時にTODAY()
等の日付関数でフィルタをかけたり、GAS(GoogleAppsScript)により裏側で表のデータが変更されるとフィルタが最新状態に更新されずに古いデータが残ってしまいます。
たとえば今月以降のデータでフィルタをかけても
翌月になると…
更新されてない!
再度フィルタのOKボタンを押せば更新されますが、非常に面倒で毎回そんなことをしているほど暇ではないですし、OKボタンを押す度に「なんでこんなことしているんだろう…」と後悔ばかりが押し寄せます。
GASで開くたびにフィルタを更新すれば解決!
そこでGASです。
スプレッドシートが開かれるタイミングでフィルタのOKボタンを押すのと同じことをしてあげれば解決します。
main.js
// onOpenでスプレッドシートが開かれる度に実行
function onOpen() {
// すべてのシートを取得
const sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (const sheet of sheets) {
// フィルタ取得
const filter = sheet.getFilter();
if (!filter) {
continue;
}
// フィルタを同じ内容で更新
const col = filter.getRange().getColumn();
const criteria = filter.getColumnFilterCriteria(col);
filter.setColumnFilterCriteria(col, criteria);
}
}
やっていることは至極単純で、getFilter()
でフィルタを取得して、全く同じ内容でセットし直してあげてます。
フィルタの内容を取得したり設定したりするにはcolumnPosition(列)
を指定してあげないとダメなので、getRange().getColumn()
で列を取得してます。
onOpen
で実行しているためシートを開きっぱなしにしていると更新されませんが、フィルタのOKボタンの時とは違い、心晴れやかな気持ちでF5を押せるはずです。