配列の中から条件に一致する要素を取り出す(Filter関数)
 Filter関数は、文字列型の配列の中から、指定された文字列を含む
(あるいは含まない)要素を取り出し、文字列型の配列として返します。
引数Compareで指定する比較モードはSplit関数の引数と同じ内容ですの
で、使用する定数に関してはそちらを参照してください。


  構文 Filter(Sourcesrray, Match, Include, Compare)

 設定項目         内容
  Sourcesrray      抽出元の文字列型の1次元配列を指定 [省略不可]
  Match            検索する文字列を指定する [省略可能]
  Include          Trueで検索文字列を含む要素を返し(True)、
                   Falseで検索文字列を含まない要素を返す [省略可能]
  Compare          文字列式を比較するときの比較モードを指定 [省略可能]


 次のサンプルは、Filter関数とSplit関数とJoin関数を組合わせて利用し、
区切り文字で分割された文字列データを、条件に一致する文字列データだけ
にする処理のサンプルです。


●サンプル●

Sub FilterSamp1()

    Dim myAddress As String
    Dim myArray() As String
    Dim i As Integer
    Dim myMsg As String

    '---複数のセル範囲のアドレスを取得
    myAddress = Application.InputBox( _
        Prompt:="複数範囲を選択してください" & vbCr & "( [Ctrl]キー + 範囲選択 )" _
        , Type:=8).Address
    '---(1)Split関数で配列に格納
    myArray = Split(myAddress, ",")
    '---(2)文字列"A"を含むアドレスだけを残す
    myArray = Filter(myArray, "A", True)
    '---(3)Join関数で配列から文字列に戻す
    myAddress = Join(myArray, ",")
    If myAddress = "" Then
        MsgBox "A列を含む範囲はありませんでした"
        Exit Sub
    Else
        Range(myAddress).Select
       MsgBox "A列を含むセル範囲 (" & myAddress & ") だけを選択しました"
    End If

End Sub


●解説●
 (1)のステートメントで、Split関数を利用して複数のセル範囲のアドレスを配列
に格納しています。(2)のステートメントではFilter関数を利用して、アドレスの
文字列にAを含む要素だけからなる配列に変更しています。その配列を、(3)のステ
ートメントで文字列に戻しています。

●ポイント●
 Join関数、Split関数と同じく、Filter関数もExcel2000で追加された新機能です。
これら3つの関数は、文字列と文字列型の配列を操作する点で共通しており、組合わ
せて使用することも多いと思いますので、3つまとめて理解しておいてください。

Excel2000



戻る


Excel Word Access VBA! モーグ