『参照先セルの番地を関数の中でも固定したいのですが 』(ぬこったれ) Excel2003/WinXP 参照元のデータが下記のようにあり、 それを別のシートに名前を入れたら住所や電話番号が表示されるようにしたいです。 参照元のデータは並べ替えなどはできません。(普段はオートフィルターにて検索) 名前の順番も並べ替えができません。 VBAを使わず名前を参照する、又は名前を登録するだけで、横の情報を取得できる方法はありませんか? ●参照元 A B C D 名前(漢字) 住所 電話番号 携帯番号 登録番号 ●別シート  A B C D 住所 名前 登録番号 電話番号 携帯番号    ---- 通常、VLOOKUP関数を使うか、名前が左端の列にない場合は Match関数で行位置を調べた後、Index関数で特定しています。 難しいことはありません。例は山ほど過去ログにあります。 (半平太) 2013/03/18(Mon) 17:14 ---- >(普段はオートフィルターにて検索) あれ? もしかして同姓同名が複数存在するってこと・・・だと、ちょっと厄介ですよ。 (半平太) 2013/03/18(Mon) 17:35 ---- >名前が左端の列にない場合は Match関数で行位置を調べた後、Index関数で特定しています。 そうなんです。左列に名前がありません。 Match関数の範囲は名前の部分でよいのでしょうか? ---- >Match関数の範囲は名前の部分でよいのでしょうか? その通りです。名前がその列の何番目にあるかを知りたいのですから。 ちなみに、Index関数の範囲は、目的のデータがあるそれぞれの列となります。 (半平太) 2013/03/18(Mon) 22:14 ---- 半平太様 ご教授ありがとうございます。 最初のスレ立ての際に記載していなかったのですが、 登録番号が 123-012 D01-012 D03-D03 等と英数字になります。 こちらをハイフン以下の3桁で表記したいのですが、どうしたらよろしいのでしょうか? Match関数プラスIndexでの答えにRight関数で3桁だけを表記させても出せるのですが、 その場合だと、1行さらに項目を追加しなければいけないため、できれば1つのセルで 行いたく思っております。 =INDEX(RIGHT(参照元シート!登録列,3),MATCH(B2,参照元シート!名前列,0),1 これだと、エラーになってしまいます。 どうしたらよろしいのでしょうか? ---- コードの列ですね? そこだけは、取得したデータを、更にRight関数で右3ケタ切り出す必要がありますので、 =IF(B2="","",RIGHT(INDEX(登録列,MATCH(B2,名前列,0),2),3)) となります。 ※ Mougにも私の意見を書いておきましたが、Right関数は最後に使ってください。(大外で使う) さもないと、対象データすべてについてRight関数が適用され、大量の無駄な計算が行われてしまいます。   Mougはマルチポスト禁止なので、あっちは早急に閉じてください。ルール違反ですよ。 (半平太) 2013/03/18(Mon) 23:29 ---- ご連絡ありがとうございます。 マルチポストの意味を理解していなくすいませんでした。 今回改めて意味を理解させていただきました。 申し訳ございませんでした。 さて、本題ですが、 =IF(B2="","",RIGHT(INDEX(登録列,MATCH(B2,名前列,0),2),3)) こちらですと、エラーになってしまいます。 下記のようにしたら動作いたしました。 =IF(B3="","",RIGHT(INDEX(登録列,MATCH(B3,名前列,0),1),3)) 関数の意味を理解したいため、原因を教えていただけませんでしょうか? ---- >=IF(B2="","",RIGHT(INDEX(登録列,MATCH(B2,名前列,0),2),3)) >こちらですと、エラーになってしまいます。 > >下記のようにしたら動作いたしました。 >=IF(B3="","",RIGHT(INDEX(登録列,MATCH(B3,名前列,0),1),3)) 私は、名前から登録番号まで(全列)一括して「登録列」と名前定義したのかと勘違いして 上の回答をしました。 各項目列を1列ずつ指定するか、左端が目的の列であれば、ぬこったれさんの式が正しいです。 なお、1列指定の場合、第3引数は「1」「0」「省略」いずれも正しい結果が返されます。 (半平太) 2013/03/19(Tue) 12:19