【脱・初心者】もうFor文はいらない?VBAのFilter関数で条件に合うデータを一瞬で抜き出す方法

【業務効率化】VBA
スポンサーリンク

「またループ書くの?」という悩みへの終止符

「この1,000行あるリストから、支店ごとにデータをまとめておいて」 

上司からのこんな依頼、ありますよね。VBAを覚えたての頃の私は、愚直にこう書いていました。

  1. 新しい配列を用意して……
  2. For i = 0 To UBound(元の配列) でループを回して……
  3. If 元の配列(i) Like “*東京支店*” Then で判定して……
  4. 合致したら新しい配列を ReDim Preserve で拡張して格納して……。

「……長い! 読みづらい! 疲れる!」

当時はこんなふうに思っていましたが、実はこれ、「Filter関数」を使えばたった1行で終わるんです。

この手法を知ったとき、私は自身の知識不足を痛感すると同時に、その圧倒的な効率の良さに大きな衝撃を受けました。 

【業務効率化】VBAの記事を見る 

Filter関数は「お料理のふるい」と同じです

Filter関数を専門的に説明すると、1次元配列から特定の文字列を含む要素を抽出する関数となります。
しかし、もっと直感的に理解するなら、料理で使うふるいやストレーナーを想像してみてください。

大量のデータの中から特定のキーワードだけを、ひと振りでサッと取り出す。そんなスマートな操作をイメージしていただくと分かりやすいでしょう。

基本的な記述方法

ResultArray = Filter(SourceArray, "検索したい文字")

たったこれだけです。For文もNextもIfも必要ありません。

【実践】コピペで使える!爆速抽出コード 

業務で頻出する、商品リストから特定のキーワードが含まれるものだけを抽出するサンプルコードをご紹介します。

Sub Sample_Filter()
    ' --- 変数の準備 ---
    Dim ProductList As Variant
    Dim FoundItems As Variant
    Dim i As Long

    ' 1. 元となるデータを作成
    ProductList = Array("リンゴ(青森)", "バナナ(フィリピン)", "リンゴ(長野)", "ブドウ(山梨)")

    ' 2. 「リンゴ」が含まれる要素だけを抽出
    FoundItems = Filter(ProductList, "リンゴ")

    ' 3. 結果を表示
    If UBound(FoundItems) = -1 Then
        MsgBox "見つかりませんでした。"
    Else
        For i = 0 To UBound(FoundItems)
            Debug.Print "抽出結果: " & FoundItems(i)
        Next i

        MsgBox UBound(FoundItems) + 1 & "件のデータが見つかりました。"
    End If
End Sub

Filter関数を使いこなすための3つのポイント

実務で使うために、これだけは覚えておいてほしいポイントが3つあります。

  1. 部分一致による検索
    「リンゴ」と指定すれば、「リンゴ(青森)」も「リンゴ(長野)」も柔軟に拾い上げることができます。
  2. 1次元配列専用であること
    Rangeオブジェクトから直接取得した2次元配列には使用できません。ここが最も躓きやすいポイントですので、注意が必要です。
  3. 大文字・小文字の区別を設定可能
    第4引数にvbTextCompareを指定することで、大文字・小文字を区別せずに検索を行うことができます。 

最後に:失敗を恐れずに「楽」をしよう

以前の私は、 何でもかんでもFor文で書いていました。でも、実務の現場で求められるのは、速くて、正確で、誰が見てもわかりやすい簡潔なコードです。

Filter関数のよう便利な道具を覚えることは、決して手抜きではありません。むしろ、付加価値の高い、より重要な業務に集中するための賢い選択です。 

もし「配列って難しそう……」と感じていても大丈夫です。まずはこのコードをコピペして、検索ワードを変えて試してみてください。その一歩が、日々の事務作業を変えていくはずです!

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました