検索・抽出

関数 説明
LOOKUP 検索値に対応したデータを取り出す (検査範囲は1行または1列)
MATCH 検索値に対応するデータの位置番号を返す
VLOOKUP に並んだ一覧表から、検索値に対応したデータを取り出す (検査範囲は複数列)
HLOOKUP に並んだ一覧表から、検索値に対応したデータを取り出す (検査範囲は複数行)
INDEX 表から、行位置と列位置で指定した位置のデータを取り出す
CHOOSE 値のリストから、特定の位置番号のデータを取り出す

単純なデータを一度処理するだけならば、検索する値がある列または行をキーに並べ替えることでも抽出できます。

特定の条件に一致するセルは、IS関数IF関数で抽出できます。また条件に一致したセルの数を知りたいだけならば、COUNTIF関数を用います。

LOOKUP

データではなく、そのデータがある位置を調べたいならば、MATCHを利用します。

LOOKUP(検査値, 検査範囲, [対応範囲])
LOOKUP 関数 - Office のサポート

検査範囲にある値がコード順の昇順に配置されていなければ、正しい結果を得られません。

検査値が見つからなかった場合、範囲内にある検査値以下の最大値が一致する値とみなされます。検査値以下の値が存在しなければ、#N/Aが返されます。

評価対象のシート
  A B
1 10 A
2 20 B
3 30 C
4 40 D
結果 理由
=LOOKUP(30,A1:A4,B1:B4) C 一致するA3の値に、B3が対応するため
=LOOKUP(5,A1:A4,B1:B4) #N/A 一致する値が存在せず、検査値5以下の値も存在しないため
=LOOKUP(15,A1:A4,B1:B4) A 一致する値は存在しないが、検査値15以下ではA1の10が最大であり、それにB1が対応するため
=LOOKUP(50,A1:A4,B1:B4) D 一致する値は存在しないが、検査値50以下ではA4の40が最大であり、それにB4が対応するため

LOOKUPには既定のベクトル形式以外に、配列形式もあります。

LOOKUP(検査値, 配列)

この関数は配列の範囲が縦長か横長かによって、下表のように挙動が異なります。

配列の大きさ 検索方向 検索範囲 戻り値  
縦長 表の左端列 表の右端列 VLOOKUPのような動作
横長 表の上端行 表の下端行 HLOOKUPのような動作

たとえば=LOOKUP(A1,B2:C5)とすると範囲が縦長となるため、B2:B5の範囲をA1の値で検索し、対応する値がC2:C5から返されます。

MATCH

MATCH(検査値, 検査範囲, [照合の型])
MATCH 関数 - Office のサポート
照合の型
検索対象 検査範囲の並び順
1または省略 検査値以下の最大の値 昇順であることが必須。1~9、A~Z、あ~ん、FALSE~TRUEの順
0 検査値と等しい最初の値 任意
-1 検査値以上の最小の値 降順であることが必須。9~1、Z~A、ん~あ、TRUE~FALSEの順
評価対象のシート
  A
1 5
2 20
3 40
4 30
結果 理由
=MATCH(10,A1:A4) 1 A1の値が10以下の最大の値であるから
=MATCH(10,A1:A4,0) #N/A 10と等しい値がないから
=MATCH(10,A1:A4,-1) #N/A 降順に並べられていないから
=MATCH(20,A1:A4,0) 2 A2の値が10と一致するから

VLOOKUP

左端の列から値を検索し、対応するセルの値を取得できます。

VLOOKUP(検索値, 範囲, 列番号, 検索の型)
VLOOKUP 関数 - Office のサポート

検索値は、範囲の左端にある必要があります。

第4引数の検索の型を省略すると「昇順一致」となり、その場合は左端の列を、コード順の昇順に並べ替えておく必要があります。FALSEを指定すると「完全一致」となり、並べ替えの必要はありません。

一致する値が見つからないときは、#N/Aが返されます。

ROW

指定のセル、または数式が入力されているセルの行番号を取得できます。

ROW([範囲])
ROW 関数 - Office サポート
  A
計算結果
1 =ROW()*2 2
2 =ROW()*2 4
3 =ROW()*2 6