【VBA】AdvancedFilterというのを見つけた話
おはようございます。こんにちは。こんばんは。
MOSのテキストを買って勉強中のとりにくVBAです。
Wordの勉強をしていますが、いろいろな発見があって楽しいですよ。
さて今回は、他人が作ったマクロを見たら初めて見たメソッドがおもしろいものだったので紹介しようと思います。
AdvancedFileterメソッド
発見したメソッドはAdvancedFilterメソッドです。
経理簿ファイルのマクロに記述されていて、その見た目はだいたいこんな感じでした。
入力シートにバーッと入力していって、振り分けボタンを押すと、項目ごとに分かれたシートに転記されるみたいなやつです。
この振り分けボタンにAdvancedFilterメソッドが使われていました。
フィルターをかけて、別のところに転記するのってけっこう実務ではありそうだなあと思い、便利なものな気がしてきました。
使い方
とりあえず公式ドキュメントを見てみましょう。
docs.microsoft.com
ちなみに日本語訳されたものだけではなくて、英語でも読んでみると意外とわかりやすかったりします。
さて、これを見て私はCriteriaRangeのパラメーターがよくわかりませんでした。
そこで助けてもらったのがこちらのページです。
抽出条件をセルに書き出しておく必要があります。
とあります。
CriteriaRangeはセルに書き出しておいて、Rangeで指定するんですね~。変なの。
やってみよう
とりあえず、同じシートの別のセルに転記されるようにしてみました。
H1:H2セルに項目の検索条件を設定しています。
振り分けボタンを押すと、検索条件で絞り込みをして転記してくれます。
コードはこのような感じです。
一行ですっきりかけるのはいいですね。
シートモジュールにchangeイベントとして書けば、簡単な検索フォームが作れちゃうなあと思いました。
終わりに
このメソッドを知って結構驚きでした。
同じような動きをするものを作ったときがあったと思いますが、そのときはIf文とFor文を組み合わせて作りました。
まさか一行で同じものができるとは。
たまに他の人が作ったものを見てみるのもいい発見がありそうです。