LoginSignup
3
2

More than 3 years have passed since last update.

【GoogleAppsScript】スプレッドシートのフィルタを開くたびに更新する【GAS】

Posted at

スプレッドシートのフィルタが更新されない!

スプレッドシートのフィルタを使用してる時にTODAY()等の日付関数でフィルタをかけたり、GAS(GoogleAppsScript)により裏側で表のデータが変更されるとフィルタが最新状態に更新されずに古いデータが残ってしまいます。

フィルタ

たとえば今月以降のデータでフィルタをかけても

表_3月

翌月になると…

表_4月

更新されてない!

再度フィルタの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を押せるはずです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2