VBAでも使えるMATCH関数!文字列をシート内検索する方法

エクセルのワークシート上にある文字列や数値を検索したいときってありますよね。

Ctrl + Fの検索機能やソート機能、フィルタ機能を使う方法の他、ワークシート関数のVLOOKUP関数、VBAでのFINDメソッドを使う方法など、いろいろな解決法が考えられます。

オススメはMATCH関数を使う方法です。

MATCH関数はワークシート関数ですが、ワークシートファンクションを使うとVBAでも使うことができます。

この記事では、『VBAでも使えるMATCH関数で、任意の文字列を検索する方法』について解説します。

1. MATCH関数をオススメする理由

こんにちは。エクセルマン・ブリーダーのしもむぎ(@re_znd13)です。

MATCH関数はあるセル範囲にある文字列や数値を検索して、それがどの位置にあるかを返すシンプルな関数です。

このシンプルさが一番のメリット!

VLOOKUP関数やFINDメソッドは単体で複雑な検索も可能ですが、多くのデータを扱う場合には時間がかかってしまうデメリットもあるんです。

MATCH関数はシンプルな分、処理時間がそれほどかかりません。

その上、他の関数とも組み合わせやすいのでオススメなんです。

2. MATCH関数の使い方

MATCH関数の基本的な使い方について見ていきましょう。

書式としては『MATCH(検査値,検査範囲,[照合の型])』となります。

検査値には数値文字列論理値を指定します。セル参照も可能です。

検査範囲には検索するセル範囲を指定します。

照合の型には1、0、-1の引数を指定します。引数の意味は以下の通りです。

・1:検査値以下の最大値を検索。昇順である必要があります。

・0:検査値と等しい最初の値を検索。

・-1:検査値以上の最小値を検索。降順である必要があります。

省略する場合、1となるので注意が必要です。

0を指定したとき検査値としてワイルドカード文字(?や*)を使用することもできます。

そして、MATCH関数が返すのは検査値の相対位置となります。

検査範囲に行を指定したら検査範囲内で何列目に検査値があるか、

検査範囲に列を指定したら検査範囲内で何行目に検査値があるか、が返ってくるわけです。

MATCH関数の使用例

3. INDEX関数と組み合わせて威力を発揮

MATCH関数でわかるのは検査値の相対位置なので、多くの場合、他の関数と組み合わせて使用します。

相性がよいのはINDEX関数です。

INDEX関数は、行と列を指定することでそのセルの値を返してくれる関数です。

例えば、『INDEX(A3:G3,3)』とすればA~G列の3行目の中で3列目のセルの値を返してくれます。

『INDEX(B12:B18,6)』とすればB列の12~18行の中で6行目のセルの値を返してくれます。

この3や6という数値(相対位置)はMATCH関数で求められるのですから、INDEX関数とMATCH関数の組み合わせで任意のセルの参照が可能となる、というわけです。

INDEX関数との組み合わせ

4. VBAでMATCH関数を使う方法

ここまで、ワークシート上でのMATCH関数の使い方を見てきました。

次に、VBAでMATCH関数を使うことを考えてみましょう。

図のような表があります。ある機器の電気的な入力と出力を測定したものです。これらの測定値から入力力率というものを求めてみます。

※入力力率は入力電力 / (入力電圧 * 入力電流)という簡単な式で求められます。

力率を求める例

MATCH関数やINDEX関数はワークシート関数なので、ワークシートファンクションを使って記述します。

記述例は以下の通りです。

Sub 力率を求める例()

Dim pi, vi, ii, pf As String
Dim x, y, z As String

x = WorksheetFunction.Match("入力電力", Range("A:A"), 0)
pi = WorksheetFunction.Index(Range("B:B"), x)

y = WorksheetFunction.Match("入力電圧", Range("A:A"), 0)
vi = WorksheetFunction.Index(Range("B:B"), y)

z = WorksheetFunction.Match("入力電流", Range("A:A"), 0)
ii = WorksheetFunction.Index(Range("B:B"), z)

pf = pi / (vi * ii)

Cells(11, 2).Value = pf

End Sub

5. まとめ

この記事では『MATCH関数を使って任意の文字列を検索する方法』を解説しましたが、いかがでしたか?

シンプルな関数だからこそ、使い方も多様です。使いこなしていきたいですね。