Excel オートフィルタをもうちょっと改良するマクロ 個人用マクロブック用

Excel カスタマイズ

スポンサーリンク

以前の記事で、Excelのオートフィルタについて、難しいが役立つショートカットキーというのを紹介した。

Excel オートフィルタ関係 難しいがかなり役立つコマンド
Excelのオートフィルタは便利で、マウス操作だけでもかなり業務効率は上がる。 しかし、難しくて面倒だけど実用…

これに書いてる内容自体に誤りはないと思うが、「まだこんなんじゃ面倒が全然解決されたうちに入らんよ。まだもっと改善できんわけ?」という不満も湧き上がってこようものだと思うのだ。

私自身が最近実際に、経理業務でExcelを操作してて、これらのショートカットキーを使ってて面倒すぎて嫌になってたこともあって、今回の記事を書いた。

「現在選択している値でフィルタリング」について

具体的に一番ケチがつくのは、この記事中の「現在選択している値でフィルタリングするコマンド」だ。
やり方は

    表示モードを「改ページプレビュー」ではなく標準モードにした状態で、対象のセルをクリック
    → 右クリック(キーボードの右クリックボタン)
    →Eキー
    →Vキー

ということだけど、本当に面倒くさい。

改ページプレビューじゃ動作しないとか、条件がやかましすぎて、そんなんやってられっかというのが当然のレベル。

これの改良方法の一つとしては、リボンかクイックアクセスツールバーのカスタマイズで、「オートフィルター」という名前のボタンを追加すれば良い。

このボタンは「すべてのコマンド」か「リボンにないコマンド」から追加できる。

名前からして、単にオートフィルタを表に設定するボタンのように思えるが、実はそうではない。

「現在選択している値でフィルタリング」する機能をそのまま実現してくれるボタンだ。

オートフィルタが設定されているときにやればもちろん作動するし、オートフィルタが設定されていないときにやったら、フィルタリングと同時にオートフィルタの設定もしてくれる。

リボンのカスタマイズについてはこちら
クイックアクセスツールバーのカスタマイズについてはこちら

Excel リボンはカスタマイズしまくろう。配置を無理に覚えようとしなくて良い
今回の記事では、Excel(2010以降のバージョン)の操作で否応なく使わされまくることになる「リボン」につい…
Excel2010以降 クイックアクセスツールバーのカスタマイズ
Excel(2007以降バージョン)には「リボン」というものがあって、それについての解説記事も別途書いているが…

ただこのツールバーは、私個人はあまり使っていない。

Excelの表はショートカットキー「Ctrl + T」でテーブルというものに変換でき、私はそればかり使うのだけど、そのテーブルにはこのツールバーは作動しないからだ。

「テーブル」についてはそのうち、物凄い分量を使って説明しようと思ってるのだけど、分量が凄すぎるので今は時間が取れず書けない。
言い訳だけどこれマジ。

オートフィルタの改良マクロ

さて、上記の「現在選択している値でフィルタリング」のほか、オートフィルタにはもう少し有効なショートカットキーがなくて困る場面が幾つかあるので、それを改良するマクロを組んでみた。

まずはソースコードから。

このマクロは、Excelの個人用マクロブックに組み込んで使うと良いだろう。

個人用マクロブックとかについては、ここを展開。

オリジナルのマクロをリボンに追加する方法はこちら

個人用マクロブックについては、こちらこちらで述べています。

 

何か英語で適当な(本当に適当の即興です)名前を付けたマクロが幾つかあるけど、使用するときは「filter_ThisCellValue」「clearFilteringThisColumn」「displayFilterDialog」の3つ(以下、「フィルタマクロ」と呼ぶ)を、リボンやクイックアクセスツールバー、あるいはショートカットキーに組み込めば良い。

マクロをショートカットキーに組み込む方法はこちら

Excel 個人用マクロブックPersonal.xlsbのマクロにショートカットキーを割り振る
Excelの個人用マクロブックPersonal.xlsbに組み込む、カスタマイズ用のマクロを色々とこのブログで…

一番最初に「moreForAutoFilter」っていうのもあるけど、これは言ってみればゲーム機のハードみたいなもの。
フィルタマクロの3つがゲームソフトみたいなもので、これらを実際には動かすわけね。
フィルタマクロは、「Call moreForAutoFilter(3)」とか中に数字を入れて、ゲーム機にゲームソフトの番号を伝えてるだけ。

カッコつけてこんなソースの書き方してるけど、最初からこういう風に書けると計算ずくでやってるわけでもない。

たまたま、共通化できる箇所が多かったからこういう風にまとめられただけのことだ。

マクロの動作

ソースコードの内容についても解説したいところだが、だいぶ長くなりそうだし、ソースコード中のコメントも多めにしてあるので今回は割愛する。

そのかわり、各マクロの動作について述べる。

選択されたセルの値でフィルタ

まず、選択されたセルの値でフィルタする「filter_ThisCellValue」。
これは動作の説明は不要だが、ソースコードで数値・日付・それ以外に場合分けしてることについて少し述べる。

まず数値だが、Excelのオートフィルタは数値に対して使い勝手が悪いため。これは前回記事を参照。

そして日付なのだが、これを特別扱いしなかった場合、例えば「2018/10/08」という日付は「10/8/2018」と変換されてオートフィルタ中で検索され上手くいかない。

どうもこの辺は、Excel VBAの厄介な仕様としか言えない。

選択列のフィルタをクリア

オートフィルタでは、フィルタリングを1列分だけ解除できるよう「○○からフィルターをクリア」というメニューが表示される。

これを、いちいちオートフィルタの□ボタンを押さずとも実行できるようにしたマクロが上記の「clearFilteringThisColumn」だ。

上図のようにE列において「フィルターをクリア」をしたければ、E列のどこかをクリックした上でマクロを実行すれば良い。

「~を含む」オートフィルタダイアログを表示

最後は「displayFilterDialog」マクロ。

例えば「加藤」という値のセルをクリックしてからこのマクロを実行すれば、下図のようなオートフィルタの「○○を含む」ダイアログが出る。

下の方には「**を含む」というのが出ているが、この「*」はワイルドカードとかいうものの一つで、<全ての文字>に該当するものを示す。

だから通常、この下段は放置しておけば良い。
ダイアログの上段にも下段にも「を含む」条件を載せるには、こういうやり方しか思いつかなかった。

スポンサーリンク