★ExcelVBA ~ フィルターをかけたままで保存できないようにする方法

※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。

 

エクセルでフィルターをかけたままで保存できないようにする設定ありますか?
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14328977679?post=2

 

★はじめに

ChatGPTに聞きましたら、直接の設定はないようで、アドインファイル(xlam。VBA入り)を作って登録しておくと、閉じるときに開いているすべてのファイルの全てのフィルタを解除してくれるみたいです。

こちらでも試してみたら、そういう動作になりました。
アドイン設定をすれば、すべてのxlsx拡張子にもxlsm拡張子にも適用されます。

ただ、マクロが有効でないといけないし、変な挙動をしてファイルを壊す可能性もゼロではないです。
また、上書き保存する度にフィルタ解除されてしまうサンプルなので、最後の閉じるときだけ、ということなら、作り替えが必要です。
(作り替えで正常動作するかは私は未確認です。すみません。)

また、パソコン1台につき、それぞれにアドイン設定が必要になってしまいます。
コードがサンプルレベルなので、変な挙動をしてファイルを壊す可能性もゼロではないのが怖いは怖いです。
VBAのプロに頼むのが良いとは思います。

●xlamファイルの作成方法

普通にxlsxとして開き、Alt+F11でVBEを開き、
「CAppEvents」という名前のクラスモジュールを挿入し、そこに以下のコードをコピペ。(Option Explicitがすでに書いてあったらそれは除外します)

次に、標準モジュールを挿入して以下のコードをコピペ

あと、「ThisWorkbook」にも以下のコードをコピペ

その状態のまま、名前を付けて保存にて、xlam形式で保存します。
保存先は自動的にアドインファイル専用の場所にExcelが決めてくれます。
名前はとりあえず「Test01.xlam」で。

●アドインの登録
で、いったんExcelを閉じて、再度開き、アドインをExcelへ登録します。
開発タブにて、
→「Excelアドイン」
→「Test01」にチェックを入れる。
→OK。

以上で、xlsxでもxlsmでも、
フィルタがかかっているときで、
「×」ボタンで閉じるときや、
「保存や上書き保存をかけたとき」に、
自動ですべてのシートのフィルタが自動解除されて保存され、
「保存前にフィルターを自動解除しました。」と出て、
OKするとそのまま閉じれます。

1シートに複数のテーブルがあるときはちょっとわかりませんけど。

上記はサンプルなので、本当にアドインでやりたいなら、プロの方にちゃんとつくってもらってください。
保存したい入力データがちゃんと保存されつつ、フィルタだけ解除されるかどうかのチェックとか。

ただ、「そもそもVBA禁止」なら、ダメですね。
この方法はあきらめるしかないです。

また、「上書き保存のときはフィルタ解除されないでほしい」という場合もこのサンプルではダメです。