• ベストアンサー

左から2列目を検査値とし1列目の数値を返す方法は

VLOOKUP関数では範囲の1列目で特定の値を検索し、指定した列と同じ行にある数値を返しますが、これを2列目で特定の値を検索し、左端の1列目の値を返す方法を探しています。可能でしょうか? 1列目にNo.、2列目に氏名があります。これを名前を検索して、1列目の番号を返したいわけです。列を入れ替えれば可能ですが、入れ替えずにやる方法あれば教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jo-zen
  • ベストアンサー率42% (848/1995)
回答No.1

作業セルを一番左に持ってくるしかないと思います。 検索値に等しいならば1となるようにしておいて、作業セルも含めて、VLOOKUP関数の検索域としてやるわけです。 すでにデータが入っていて一番左に作業セルがとれない場合でも、列を挿入してやれば、個々の関数とか入っていても自動的にずれに対応してくれます。

karugamonooyako
質問者

お礼

返事が遅くなってすみません。やっぱりこの方法が簡単でした。お騒がせしました。みなさんありがとうございます。

その他の回答 (3)

noname#79209
noname#79209
回答No.4

検査範囲がA1:B5だったとすれば C1に =A1 として5行目までコピー。 A列で検索して。B列の値が欲しいなら VLOOKUP(検査値,A1:B5,2) B列で検索して。実際はA列の値が欲しいなら VLOOKUP(検査値,B1:C5,2) 表面的にはC列の値が得られますが、 C列の値は =A1 なので実質的にはA列の値が得られることになります。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

(1)VLOOUPに拘って VLOOKUP関数の仕様です。質問のようなことはそのままでは出来ません。B列に列挿入しA列を挿入列にコピーし(または=A1) 非表示にするなどは論外として (2)その他の関数利用 VLOOKUP関数はMATCH関数と機能で親類関係にある。 MATCH関数で該当行を見つけ、INDEX関数で範囲の中の その行のデータを採ればよい。列を指定できるから。 (3)VBA利用  Findメソッドなど利用 例データ F1:G6 1 山田 2 大木 4 越野 6 上村 7 近藤 8 鈴木 ーー ユーザー関数 標準モジュールに Function vlk(a) Application.Volatile (True) Dim x As Range Set x = Range("G1:G10").Find(what:=a.Value) vlk = x.Offset(0, -1) End Function ーー シートで A列  B列 大木 2 近藤 7 鈴木 8 越野 4 B1の関数は =vlk(A1) 下方向に式を複写する。 空白行の手当てで =IF(A1="","",vlk(A1))

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

INDEX関数とMATCH関数の組み合わせで可能です 例えばC1セルに検索したい「氏名」を入力して  =IF(ISNA(MATCH(C1,B:B,0)),"該当なし",INDEX(A:A,MATCH(C1,B:B,0))) でヒットした最初の行のA列の値を取得できます。(ヒットしない場合は「該当なし」と表示)

関連するQ&A