Excel VBA:Filter関数による配列の検索方法|含む/含まない

Filter関数は検索結果のデータを全て配列で取得できるので、次や前へと移動し検索する必要がありません。

ここではVBAで配列を確保し、そこからFilter関数を使い検索するサンプル シートを作成します。

構文 : Filter(SourceArray, Match, Include, Compare)

引数 内容
SourceArray 検索する1次元の配列を指定します。 文字列の配列にします。
Match 検索する文字列です。
Include (省略可)
True : 検索する文字列を含む(既定値)
False : 検索する文字列を含まない
Compare (省略可)省略すると大文字と小文字を区別します。


Homeに戻る > Excel 数値・文字列・検索・印刷のTipsへ

配列からFilter関数で検索するVBA

シートに2つのコマンドボタンとテキストボックス コントロールを配置しました。
[配列にデータをセット]ボタンをクリックすると、配列を確保しデータをセットします。
[配列からデータ検索]ボタンをクリックすると、Filterで検索し見つかったデータをテキストボックスに表示します。
配列からFilter関数で検索するVBA

コマンドボタンのクリックイベントで実行するVBAです。
コマンドボタンのクリックイベントで実行するVBA

VBAについて

・Private vAy As Variant でシート全体で使用する配列を宣言しています。

■ CommandButton1_Click
・Redimで要素が10から1300の配列を確保しています。
・Forループで文字列データを配列にセットしています。

■ CommandButton2_Click
・IsArrayで配列が確保されているかチェックしています。 もしCommandButton1が実行されていなければ、ここでエラー回避できます。
・Filterで「EL55」を検索し、見つかった結果をvByの配列に入れます。
・LBound(vBy)とUBound(vBy)で配列の要素の最小から最大を取得し、Forループでテキストボックスに表示します。

Option Explicit
Private vAy As Variant

Private Sub CommandButton1_Click()
    Dim i As Long
    
    ReDim vAy(10 To 1300)
    
    For i = 10 To 1300
        vAy(i) = "EXCEL" & i & "VBA"
    Next
End Sub

Private Sub CommandButton2_Click()
    Dim vBy As Variant
    Dim i As Long
    
    If IsArray(vAy) = False Then
        MsgBox "配列にデータをセットを実行してください"
        Exit Sub
    End If
    
    テキスト1 = Null
    
    vBy = Filter(vAy, "EL55")
    
    For i = LBound(vBy) To UBound(vBy)
        テキスト1 = テキスト1 & vBy(i) & vbCrLf
    Next
End Sub

実行結果です。
「EL55」が含まれるデータが検索され表示されています。
このようにFilterを使うと、検索結果をまとめて取得できるので、色々と使い道がありそうです。
さらに「含まない」の検索はアプリでも見ないので、使ってみたいと思います。
データが検索され表示された



Homeに戻る > Excel 数値・文字列・検索・印刷のTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved