- ベストアンサー
EXCELで範囲内にある値を検索してA列の値を返す
タイトル通りなのですが、OSはXPでEXCEL2000を使用しています。 シート内ですが 1.A列には文字列が入っています。200行まで空白は無いです。 1.B列からL列の200行までに数字がランダムに入っています。 2.数字は1~500までです。 3.行によってはL列まですべてのセルに値が入ってません。 数字の入っていないセルは空白です。 4.数字の重複はありません。 やりたいことは 別のシートのA列に1~500までの数字を入れ、B列に上記範囲の中からその数字を検索して、その行のA列の値を返したいのですが、出来ません。 どの関数を組み合わせれば出来るのでしょうか? vlookupの検索範囲は1列だけなのでダメでした。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一例です。 データシートをSheet1としています。 =IF($A1<>"",INDEX(Sheet1!A:A,SUMPRODUCT((Sheet1!$B$1:$L$200=$A1)*ROW(Sheet1!$A$1:$A$200))),"")
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
実例を挙げないために、質問がごたごたしていると思う。200行・L列有るなど、5行・4列の実例で質問しても、その回答で200行の場合も類推は易しいはず。 シート1(Sheet1)にA-D列に A B C D X 134 336 435 Y 211 115 399 Z 261 316 34 U 478 275 377 ーー シート2(Sheet2)に A B 336 399 377 ・・・ と有るとして、シート1の全行のBーD列を探して、Sheet2のA列の数字を見け、見つかった行の、シート1のA列の文字列を、シート2のB列に持ってくる。 こういうように質問を書くべきです。 ーーー 多列対象の検索は、普通の既存関数(MATCH、VLOOKUP)では出来ないので、VBAを使って、ユーザー関数を作る方法もあります。 この関数は、見つかった行番号を返します。 標準モジュールに Function findf(a, b) n = a.Find(b).Row findf = n End Function シート2のB2に =INDEX(Sheet1!$A$1:$A$10,findf(Sheet1!$A$2:$D$10,A2)) と入れて下方向に式を複写します A B 336 X 399 Y 377 U 211 Y 111 #VALUE! のように結果が出ます。 骨子はこういうので良いと思うが、上記で何か足らない点、不都合点が有るかな。シート1で空白セルを作っても蒸気で変えなくて済むと思う。 見つからない場合の処理は、質問者が自由に関数を工夫すること。 IF文を使って、エラーの場合は「見つからず」と言う値を返すとか。
お礼
回答ありがとうございます。 出来ました。助かりました。 更に、質問の仕方のご指導ありがとうございます。 次回の質問時の参考にしていただきます。 ありがとうございました。
お礼
回答ありがとうございます。 私の質問で理解していただいてありがとうございます。 そのまま式を入力して出来ました。助かりました。 ありがとうございました。