【Excel・エクセル】MATCH関数とOFFSET関数で、条件に合うセルを抽出する

抽出,検索

もりの

MATCH関数とOFFSET関数で、VLOOKUP関数より便利に使えるって聞いたよ?

やまの

ちょっと難しいかもだけど、やり方を見てみよう。

今回のポイント
  • MATCH関数とOFFSET関数を組み合わせると、VLOOKUP関数より柔軟に検索できる
  • =OFFSET(参照,MATCH(検査値,検査範囲,0)-1,列番号)
  • MATCH関数とINDEX関数でも同じようなことはできる

スポンサーリンク

 MATCH関数とOFFSET関数の練習ファイルダウンロード

もりの
 
 

一緒にやってみませんか?

【Excel・エクセル】MATCH関数とOFFSET関数のおさらい

MATCH関数とは?

MATCH関数は、この値がこの範囲の中の何行目(何列目)にあるか、を調べる関数です。

MATCH関数の書き方

=MATCH(検査値,検査範囲,照合の種類)

検査値この値は
検査範囲この中の何番目?
照合の種類0:完全一致、-1:以上、1:以下

たとえば「=MATCH(E2,A2:A6,0)」とすれば、セルE2の値がセルA2~A6の中の何行目にあるかが分かります。

MATCH関数で行数を出した画像
MATCH関数の使い方
やまの

詳しくは、こっちのページで解説しているよ。

OFFSET関数とは?

OFFSET関数は2通りの使い方がありますが、今回は指定した位置の値を抽出する使い方をします。

OFFSET関数の書き方

=OFFSET(参照,行数,列数)

参照このセルから
行数縦方向にこのセル分(+なら下、-なら上)
列数横方向にこのセル分(+なら右、-なら左)の値を抽出して

注意したいのが行数と列数。

  • 参照と同じ位置は0
  • 行数:正の数は数値分下、負の数は数値分上
  • 列数:正の数は数値分右、負の数は数値分左

という感じで指定します。

行数と列数の考え方
行数と列数の考え方

例えばこの表で「OFFSET(B4,2,0)」と書いた場合。

B4から2つ下にある、B6の値を抽出します。

OFFSET関数でセルの値を抜き出した画像
OFFSET関数の使用例

VLOOKUP関数とは?

VLOOKUP関数は、条件に合うセルを抽出する関数です。

VLOOKUP関数の書き方

=VLOOKUP(検索値,範囲,列番号,検索方法)

検索値この値を基準にして
範囲この範囲の中の
列番号左から何番目にある値を抽出して
検索方法基本は0(FALSE)でOK
VLOOKUP関数の例
VLOOKUP関数の例

VLOOKUP関数は便利ですが、範囲の一番左端に検索値の列がないと抽出できません。

また、

やまの

それを無視して値を抽出できるのが、MATCH関数とOFFSET関数の組み合わせなんよ。

【Excel・エクセル】MATCH関数とOFFSET関数の組み合わせ方

2つを組み合わせると、こんな書き方になります。

2つを組み合わせた書き方

=OFFSET(参照,MATCH(検査値,検査範囲,0)-1,列番号)

やまの

OFFSET関数の行番号を、MATCH関数で表すんよ。

もりの

あの「-1」がポイントな気がする……!

この表、検索値が表の内側にあり、かつ抽出したい値は検索値の列の左側にあります。

これじゃ、VLOOKUP関数が使えませんね。

検索値が半端な場所に
もりの

これは表を作り直したがいいレベル……。

MATCH関数とOFFSET関数を組み合わせて、この状態でも検索できるようにしてみましょう。

やまの

=OFFSET(C1,MATCH(G2,C1:C6,0)-1,-1)で、求められるよ。説明するね。

ステップ1

まずはOFFSET関数から書いていきます。

セルG3に、「=OFFSET(」と入力してください。

「=OFFSET(」まで入力した画像
まずは関数名

ステップ2

OFFSET関数の参照は、検索したい値が書かれた列の一番上を選びます。

今回は型番から分類を検索したので、型番が書かれたC列の一番上、セルC1をクリックします。

参照にC1を選んだ画像
参照は検索値がある列
やまの

「,(カンマ)」も忘れずにね。

ステップ3

次に行番号ですが、ここでMATCH関数の出番です。

「MATCH(」と入力して、MATCH関数を呼び出しましょう。

「MATCH(」と入力した画像
MATCH関数の出番だ

ステップ4

検査値には検索したい値(セル)を指定します。

今回はセルG3ですね。

MATCH関数の検査値を指定した画像
VLOOKUP関数の検索値と同じ
もりの

そして「,(カンマ)」

ステップ5

次の検査範囲は、検査値がある列にします。OFFSET関数の参照の列ですね。

今回はセルC1~C6までをドラッグします。

そして「,(カンマ)」

検査値が含まれる列を選択した画像
検査値が含まれる列を選択

ステップ6

次の照合の種類ですが、これは深く考えず、「0」でOKです。

これでMATCH関数部分は終わったので、カッコを閉じます。

MATCH関数を閉じた画像
MATCH関数はここで終了

ステップ7

はい、ここでポイント!「-1」します!

なぜかというと、MATCH関数は何行目かを教えてくれる関数なので、1行目は1になりますが、OFFSET関数は参照したC1(1行目)を0で表すためです!

もりの

ほえ?

やまの

0から数え始めるか、1から数え始めるかの違いだね。

OFFSETの型番の位置は「0」
OFFSETの型番の位置は「0」
MATCHの型番の位置は「1」
MATCHの型番の位置は「1」

そう、そしてそのズレを修正するために、「-1」をするのです。

やまの

難しく考えず、とりあえず―1するって覚えといてもいいと思うよ!

次の引数に移るので、「,(カンマ)」もお忘れなく。

MATCH関数の結果を-1した画像
「-1」でOFFSETとMATCHの差をなくす

ステップ8

最後の列番号は、最初の参照で選んだ列(今回はC列)から何列目の値を抽出するかです。

OFFSET関数はVLOOKUP関数と違って、基準の右側は正の数、左側は負の数で表すことができます。

今回抽出したい分類はC列の1つ右側にあるので、「-1」とすれば良さそうですね。

列番号に-1と入力した画像
列番号は右側でも左側でも指定できる

完成!

これで式は完成なので、カッコを閉じて、エンターキーを押してください。

無事、型番から分類を抽出できました!

MATCH関数とOFFSET関数で検索できた画像
MATCH関数とOFFSET関数で検索できた!
やまの

参照のセルや範囲は、必要に応じて絶対参照にしてね。

これならVLOOKUP関数より柔軟に、必要な値が抽出できそうですね!

もりの

でもこれ、MATCH関数とINDEX関数の組み合わせでもよくない?

ぶっちゃけどっちでも同じようなことはできます。

やまのの困った顔
やまの

「-1」ってややこしい部分もあるから、INDEXの方が分かりやすいまである。

まぁそれは人それぞれなので、やりやすい方で試してみてくださいね!

これで、VLOOKUP関数ではうまく抽出できない表でも、対応できますね!
それでは、お疲れさまでした!

今回のおさらい
  • MATCH関数とOFFSET関数を組み合わせると、VLOOKUP関数より柔軟に検索できる
  • =OFFSET(参照,MATCH(検査値,検査範囲,0)-1,列番号)
  • MATCH関数とINDEX関数でも同じようなことはできる