質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

7068閲覧

スプレッドシートのフィルターを自動でかける

yoyoy

総合スコア14

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2020/07/07 01:52

編集2020/07/07 23:43

Formからの情報をスプレッドシートで一覧化し、昨日以降の日付で自動で日付を更新するscriptを作成しています。
■スプレッドシートの情報
F列にある日付でフィルターをかける
1行目は説明文のため、2行目でフィルターをかける(3行目からデータ)

以下のscriptを作成しましたが、「TypeError: sh.newFilterCriteria is not a function(行 16、ファイル「フィルター」)」のエラーが表示されます。

また、一旦フィルターをかけると毎回フィルターを一旦削除しなければscriptが動かないのでしょうか。
毎回、動きを確認する際に、「フィルターを解除してください。」のMSGが表示されます。

どなたかご存じの方がいらっしゃいましたら、よろしくお願いいたします。

function

1 var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなスプレッドシートを取得 2 var sh = ss.getActiveSheet(); //アクティブなスプレッドシートのアクティブシートを取得 3 4 filterSet = sh.getRange(2,6,sh.getLastRow(),sh.getLastColumn()).createFilter(); 5 6//現在日時を取得 7var day = Moment.moment(); 8//現在から一日引く(昨日の日付) 9var yesterday = day.subtract(1,'days'); 10 11 /*フィルターをかける列*/ 12 filterSet.criteria = {}; 13 columnIndex = 5; 14 15 var criteria = sh.newFilterCriteria() 16 .whenDateAfter(yesterday) 17 .build(); 18 19 20filterSet.setColumnFilterCriteria(columnIndex, criteria); 21 22 23 24 25 26}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sawa

2020/07/07 06:59

コードがコード表示になってませんので修正を。 あと、「フィルタを作成し、『昨日以降の日付』で自動で日付を更新する」は、 GAS使わなくても普通にスプレッドシートのフィルタ機能で可能ですが、GASで実現したいということでしょうか?
yoyoy

2020/07/07 23:51

ご確認ありがとうございます。 コード表示に修正いたしました。 スプレッドシート上で完結するのであれば、そうしたいのですが、 現在、スプレッドシートには以下のフィルタを設定しています。 【現在のフィルタ】 2行目の項目を選択し、フィルタ設定をする。日付が入力される列のフィルタを条件フィルタの「次より後の日付」を選択し、「昨日」を選択。 このスプレッドシートは共有をしているため、共有者全員にフィルタがかかった状態で表示を公開しています。そのため、データ>フィルタの表示からでは、設定した本人のみしか設定がフィルタ表示されてないため、上記のような設定としました。 しかし、この設定だと、昨日の日付で自動更新されておらず、毎朝手動でフィルタを「OK」ボタンをクリックしてフィルタをかけなおしているといった状況です。 他の方法で何か、自動更新が可能な設定箇所がありましたらご教示お願いいたします。
sawa

2020/07/08 00:35

>条件フィルタの「次より後の日付」を選択し、「昨日」を選択 自動で更新されませんでしたでしょうか?失礼しました。 当方ではフィルタ表示を保存し、そのアドレスをメンバーに共有する運用をしており、 そのフィルタ表示だと自動更新されるので、普通にフィルタでも更新されるものと思ってました。 フィルタ設定での自動更新は検証してみますので、少々お待ちください。GASの方は回答いれときます。
yoyoy

2020/07/08 02:25

ご回答ありがとうございます。 フィルタ設定を保存したURLを共有すると、自動更新されるのですね。 気が付きませんでした。 フィルタの設定で、URLが変わることも、今回初めて気が付きました。 ありがとうございます。 ご連絡いただいた、フィルタ保存の設定で、自分でも検証を行い、これで問題ないようであれば、URL変更となったことを周知するか、ご連絡いただいたscriptを再度検証し、実行するかどちらかで検討しようと思います。 色々とご回答いただき、本当にありがとうございます。 大変助かりました。
sawa

2020/07/08 02:39

認識にズレがないように、念のため追加で書かせていただきますが、私がコメントで記載しているのは「フィルタ表示」っていう機能です。 https://trinity.jp/175944/ 普通にフィルタをかけてしまうと共有している利用者全員に影響してしまいますが、 「フィルタ表示」は、他の人に影響なくフィルタが出来るという利点があります。 フィルタ表示状態でも セルの値の更新等もできるので、なかなか便利なのですが、スマホやiPadからは使えないというデメリットがあります。
yoyoy

2020/07/08 04:41

ご連絡ありがとうございます。 認識が、合っておりました。 先ほど、確認したところ、「フィルタ表示」をしたURLを別のアカウントで表示させたところ、 フィルタが共有されておりました。 明日、日付の更新が自動でできているか確認をしてみたいと思います。
guest

回答1

0

ベストアンサー

記載されているコードで希望するフィルタになるのであれば、その中にシートが既にフィルタ状態か否かを判定した上で、もし既にフィルタがかかってる場合は、一旦フィルタ解除をさせてから再度フィルタをセットという動きにすれば大丈夫です。

■参考
https://vba-gas.info/gas-createfilter

トリガーを時間指定として毎日夜中の1時あたりに動かせば、GASでの自動フィルタ更新が出来ると思います。

GAS無しでやる方法は検証して、後日追記します。

投稿2020/07/08 00:40

sawa

総合スコア3002

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoyoy

2020/07/08 02:39

>GAS無しでやる方法は検証して、後日追記します。 わたしのほうでも、検証を行ってみたいと思います。
sawa

2020/07/08 23:57

検証してみましたが、 普通のフィルタ設定 → 自動更新されない フィルタ表示で保存 → 画面を開いた際にフィルタが再実行されるようで、更新される でした。普通のフィルタではダメでしたね。失礼いたしました。 一応、日付の条件設定以外にもカスタム数式やセル参照なんかも試しましたが、どれも普通のフィルタ設定では更新されませんでしたね。スプレッドシート設定で、計算を「毎時」にしたり一度閉じて開きなおしても影響なかったです。 GAS以外でフィルタを自動更新させる方法としては、 ・フィルタ表示 の保存時のURL活用 ・フィルタ関数の利用 (別シートになり、閲覧のみ) あたりになるかと思います。
yoyoy

2020/07/09 00:26

ご回答ありがとうございます。 本日、わたしも、フィルタ表示の保存で更新されていたことを確認いたしました。 他にも色々とご確認いただきありがとうございました。 参考になりました。 現在、Formでの申請送信時に、承認可否のメール本文のスプレッドシートのURLを記載しているため そのURLを修正しようと思います。 また、個別でスプレッドシートを開いている方もいるため、その方にはURLの周知を行いたいと思います。 色々とありがとうございました。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問