テーブルのフィルターボタン(失敗談)
テーブルとして書式設定を行うと、自動でフィルターボタンが付される。
これがラベルの文字と重なって、同文字を見え難くすることがよくある。
これは、フィルターボタンのチェックを外すことで、非表示化が可能だ。
CSVから取り込んだデータをテーブルとして書式設定する業務があって
毎回手動でチェックを外すのが煩雑だったため、テーブル化と併せこれを
自動化してみた。
といっても、操作自体はあまり難しくない。ListObjectのメンバーである、
ShowAutoFilterDropDownプロパティをFalseにするだけでよい。
(マクロの記録で確認)。
Sub Sample() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) Tb.ShowAutoFilterDropDown = False End Sub
動作確認の結果も良好。早速、一部の方に紹介した。するとしばらくして、
エラーの報告が寄せられてきた。しかも、エラーになる人とならない人が
いる。確認したところ、次の違いが分かった。
どうやら、Excel 2010以前は対応していないらしい。画面で見ても、Excel2010に
フィルターボタンのチェックボックスは存在しなかった。
その後の調べで、ShowAutoFilterプロパティというものもあることが分かったが、Excel2013でこれを使用するとフィルターボタンが無効になって都合が悪かった。
結局この時は、エラーを無視させることでお茶を濁してしまった。
Sub Sample() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) On Error Resume Next Tb.ShowAutoFilterDropDown = False On Error Goto 0 End Sub
今回の事例は、まさに「マクロの記録の弊害」の一つと思う。マクロの記録で得た結果について、プロパティへの理解不充分なまま、他のバージョンにおける検証不充分なまま展開してしまうと、Excel からこのようなお叱りを受けることになる。と、大いに反省した次第。
ところで、フィルターのON ⇔ OFFの切り替えには、こんな面白い方法がある。
Tb.ShowAutoFilterDropDown = Not Tb.ShowAutoFilterDropDown
このフィルターに限った話ではなく、Boolean型は True と False しかないため、現状を否定(Not)することで切り替えが可能だ。
「今の自分を否定することで、目標を実現する」
などと格好良く述べてみたところで、今回はおしまいとします。
参考まで。