とりにくを好きな人がVBAを勉強しています。

VBAを中心に、その他日々の生活で感じていることを書いていきます。

【VBA】AdvancedFilterというのを見つけた話

おはようございます。こんにちは。こんばんは。
MOSのテキストを買って勉強中のとりにくVBAです。
Wordの勉強をしていますが、いろいろな発見があって楽しいですよ。



さて今回は、他人が作ったマクロを見たら初めて見たメソッドがおもしろいものだったので紹介しようと思います。


AdvancedFileterメソッド

発見したメソッドはAdvancedFilterメソッドです。


経理簿ファイルのマクロに記述されていて、その見た目はだいたいこんな感じでした。


f:id:mayo032j:20200620094120p:plain



入力シートにバーッと入力していって、振り分けボタンを押すと、項目ごとに分かれたシートに転記されるみたいなやつです。


f:id:mayo032j:20200620094319p:plain



この振り分けボタンにAdvancedFilterメソッドが使われていました。


フィルターをかけて、別のところに転記するのってけっこう実務ではありそうだなあと思い、便利なものな気がしてきました。


使い方


とりあえず公式ドキュメントを見てみましょう。
docs.microsoft.com



ちなみに日本語訳されたものだけではなくて、英語でも読んでみると意外とわかりやすかったりします。



さて、これを見て私はCriteriaRangeのパラメーターがよくわかりませんでした。



そこで助けてもらったのがこちらのページです。


www.eurus.dti.ne.jp


抽出条件をセルに書き出しておく必要があります。


とあります。


CriteriaRangeはセルに書き出しておいて、Rangeで指定するんですね~。変なの。

やってみよう

とりあえず、同じシートの別のセルに転記されるようにしてみました。
f:id:mayo032j:20200620101035p:plain

H1:H2セルに項目の検索条件を設定しています。
振り分けボタンを押すと、検索条件で絞り込みをして転記してくれます。



コードはこのような感じです。
f:id:mayo032j:20200620101234p:plain



一行ですっきりかけるのはいいですね。



シートモジュールにchangeイベントとして書けば、簡単な検索フォームが作れちゃうなあと思いました。


終わりに

このメソッドを知って結構驚きでした。



同じような動きをするものを作ったときがあったと思いますが、そのときはIf文とFor文を組み合わせて作りました。
まさか一行で同じものができるとは。



たまに他の人が作ったものを見てみるのもいい発見がありそうです。