目次
概要
Excelにおいて、任意の範囲(表)から特定の値を取り出すことを考えます。
条件に応じて表から値を取り出す場合、VLOOKUP関数が一般的です。
しかしVLOOKUP関数は通常のままでは複数条件に対応できません。
このため表に工夫をしたり、他の関数を使うことになります。
以下にて、表から指定の条件で値を取り出す様々な方法を見ていきます。
VLOOKUP関数で表から値を取り出す
単一条件でVLOOKUP関数を使う
=VLOOKUP(【検索する値】,【検索する範囲】,取り出す列の番号,FALSE)
まず前提として、通常のVLOOKUP関数についてです。
VLOOKUP関数は指定した範囲から条件に従って任意の値を取り出します。
この際、検索する値が取り出す値よりも左側にあるのが前提となります。
「FALSE」は検索の型で完全一致となります。
多くの場合はこの「FALSE」を使うことが多いと思います。
「TRUE」は近似値(検索値を超えない最大値)に対応します。
近似値の場合、文字列は扱うことはできません。
VLOOKUP関数を複数条件に対応させる
=VLOOKUP(【検索する値】&【検索する値】,【結合列を含む検索範囲】,取り出す列の番号,FALSE)
VLOOKUP関数自体は複数条件に対応していないため、工夫を行います。
VLOOKUP関数を複数条件に対応させる最も簡単な方法の1つは、条件を結合させた「結合列」を表に加えることです。
表の左側に、複数の条件を結合した列を作ります。
例えばA1列に「=B1&C1」とすると、B1とC1の条件が組み合わさった文字列が作れます。
この結合した文字列をVLOOKUP関数の検索条件とします。
この方法は簡単ですが、デメリットは結合列を表に作らないといけない点です。
このため表の形を変えたくない場合は不便な方法となります。
表を変えず複数条件で値を取り出したい場合、例えば以下のような方法があります。
VLOOKUP関数以外で表から値を取り出す(複数条件)
INDEX関数とMATCH関数を使う
=INDEX(【表の範囲】,MATCH(【条件①】&【条件②】,【条件①の検索列】&【条件②の検索列】,【照合の型】),【取り出す値が含まれる列番号】)
表から複数条件で任意の値を取り出す方法はいくつかありますが、そのうちの1つがINDEX関数とMATCH関数を組み合わせる方法です。
配列数式であるためCtrlキーとShiftキーを押しながらEnterキーを押します。
配列数式とは、複数の計算を一気に行う数式のことです。
感覚としては小計を出さずに一気に合計を出す感覚と言ったところでしょうか。
いずれにせよ、CtrlキーとShiftキーを押しながらEnterキーを押すと配列数式となり式が{}で囲まれます。
照合の型は完全一致である「0」を用いることがほとんどであると思います。
INDEX関数、SUMPRODUCT関数、ROW関数を使う
=INDEX(【タイトル含む抽出したい列範囲】,SUMPRODUCT((【タイトル含む条件範囲】=【条件セル】)*(【タイトル含む条件範囲】=【条件セル】),ROW(【タイトル含む抽出したい列範囲】-【任意の値】)))
他の方法として、INDEX関数、SUMPRODUCT関数、ROW関数を組み合わせる方法があります。
こちらも若干複雑ですが、式は上記の通りです。
あとは条件の数に応じて式を増やしていきます。
さらに、取り出した値についてエラー処理をIFで行う場合は下記のような例が考えられます。
=IF(SUMPRODUCT((【タイトル含む条件範囲】=【条件セル】)*(【タイトル含む条件範囲】=【条件セル】),ROW(【タイトル含む抽出したい列範囲】-【指定の値】))=0,"",INDEX(【タイトル含む抽出したい列範囲】,SUMPRODUCT((【タイトル含む条件範囲】=【条件セル】)*(【タイトル含む条件範囲】=【条件セル】),ROW(【タイトル含む抽出したい列範囲】-【指定の値】))))
あとは必要に応じて条件を増やしたりIFをネストさせます。
条件範囲については直接指定してもいいでしょうが、式が長くなる場合は事前に範囲に名前を付けておくと式がスッキリしメンテナンス性が高まるでしょう。
このように式自体はやや複雑になってしまいますが、この方法だと結合列などを作らず複数条件に対応することができます。
そのほか表から任意の条件で数値を扱うことに関して
範囲内の値を数える(COUNTIF)
=COUNTIF(【数えたい範囲】,【数えたい条件】)
本題からは逸れますが、関連して指定の値を数えたい場合です。
指定範囲内で条件に合致する値を数える場合は、COUNTIF関数が一般的です。
表から条件に従って何かと値を取り出している場合、並行して用いることもあるかもしれません。