【用語集に記載の内容について】

用語集に記載されているメソッドや関数の引数は、VBAエキスパート試験の試験範囲に基づいており、すべての引数を網羅しておりません。 また、書式は公式テキストの記載に準じています。
試験範囲外の引数や詳細については、ヘルプ機能やオブジェクトブラウザーをご参照ください。

【コードをコピーして実行する場合の注意】

文字コードの関係上、半角の「¥」は「/」で表示されるため、当サイトでは全角の「¥」で記載しています。当サイトのコードをコピーして実行する場合は、全角の「¥」を半角の「¥」に変換してください。

MATCH関数(ワークシート関数)

名称MATCH関数(ワークシート関数)
説明
指定したセル範囲で検索値が見つかった位置を数値で返すワークシート関数です。

** 注意 **
戻り値の「見つかった位置の数値」とは、指定したセル範囲の上からまたは左から何番目にあるかを表し、ワークシート上の行番号ではありません。
書式
WorksheetFunction.Match(検索値, 検索範囲, 一致の種類)

検索値:検索する値を指定
検索範囲:検索するセル範囲(縦または横方向)を指定
一致の種類[省略可能]:検索の種類を値で指定

検索範囲に縦方向を指定する場合、セル範囲A1:A5のように1列のセル範囲を指定します。
横方向を指定する場合、セル範囲A1:E1のように1行のセル範囲を指定します。

<一致の種類に指定する検索の種類>
1:検索範囲が昇順に並んでいる場合、検索値以下の最大値の位置を返します。
0:完全一致した位置を返します。
-1:検索範囲が降順に並んでいる場合、検索値以上の最小値の位置を返します。

一致の種類を省略した場合は、1となります。
コード例①
【縦方向に検索】
Sub Macro1()
    Dim row As Long
    
    '検索値が指定したセル範囲の上から何番目にあるかを返す
    row = WorksheetFunction.Match("banana", Range("A2:A5"), 0)
    MsgBox "bananaの位置:" & row
End Sub

MATCH関数で、検索値「banana」が、アクティブシートのセル範囲A2:A5の上から何番目にあるかを取得して、メッセージボックスに表示します。

マクロを実行すると、アクティブシートのセルの値が以下の場合、「bananaの位置:3」のメッセージボックスが表示されます。
A
1 種類
2 apple
3 peach
4 banana
5 orange
コード例②
【INDEX関数との組み合わせで値を取得】
Sub Macro2()
    Dim name As String, data As String
    Dim cnt As Long
    
    name = "城島"
    With WorksheetFunction
        '検索するデータが上から何番目にあるかを取得
        cnt = .Match(name, Range("B2:B6"), 0)
        'MACTH関数で取得した値を使用して、A列のセル範囲の値を取得
        data = .Index(Range("A2:A6"), cnt)
    End With
    
    MsgBox name & "さんは、" & data & "所属です"
End Sub

値を検索する列が、値を取得したい列より右にある場合は、MATCH関数とINDEX関数を組み合わせて値を取得します。

MATCH関数で、検索値「城島」が、アクティブシートのセル範囲B2:B6の上から何番目にあるかを取得し、変数cntに格納します。

INDEX関数で、アクティブシートのセル範囲A2:A6の上から変数cntの値番目のセルの値を取得します。

マクロを実行すると、アクティブシートのセルの値が以下の場合、MATCH関数で取得する値が4であり、INDEX関数で、セル範囲A2:A6の上から4番目のセルの値「総務部」を取得するので、「城島さんは、総務部所属です」のメッセージボックスが表示されます。
A B
1 部署名 氏名
2 営業部 小田
3 総務部 国分
4 監査部 古賀
5 総務部 城島
6 営業部 松岡
カテゴリスタンダード