『検索処理について』(蘭) 初めまして!学校で検索処理の宿題が出ました。 (シート1)      新幹線料金計算 コード 駅名 1 東京 2 品川 3 新横浜 4 名古屋 5 京都 6 新大阪 7 新神戸 8 姫路  9  岡山 10 福山  11    広島  12 徳山 13 新山口 14 小倉  15 博多 コード 車種 1 のぞみ 2    ひかり (シート2)         東京     品川     新横浜     名古屋      運賃  特急  運賃  特急  運賃  特急  運賃  特急 東京    −  −  品川   160  2390   ―   ― 新横浜  480  2390  400   2390  ―   ― 名古屋  6090  4690  6090  4690  5460  4690  ―    ―                               (以下略) こんな感じで、別シートに分けられたものを、VLOOKUP・HLOOKUP・IFの3つを使い、 出発駅のコード、到着駅のコードを入力するだけで運賃と特急料金が出るように シート1に処理せよとのことで…。 シート3には『ひかり』のデータも入っています。シート1上でコードを入力し、 駅名を返すのは=if(c4"","",vlookup(c4,$b$9:$c$24,2,0))で出せたのですが、 これをシート2の駅名に反映させるにはどうしたら良いですか? よろしくお願いします。 ---- セル番地などが判るように、もう少し表を直していただくと回答が出やすいかと思います。 以下のような感じで表せますでしょうか。 Sheet2 A B C D E F G H I 1 東京 品川 新横浜 名古屋 2 運賃 特急 運賃 特急 運賃 特急 運賃 特急 3 東京 − − 4 品川 160 2390 − − 5 新横浜 480 2390 400 2390 − − 6 名古屋 6090 4690 6090 4690 5460 4690 − − 7 (以下略) (川野鮎太郎) ---- 宿題という時点で、回答はしづらいですが(^^;) >VLOOKUP・HLOOKUP・IFの3つを使い この問題は難しい・・・この3つで解けるのでしょうか? 料金表が鮎さん提示のもので、↓のように表示すると仮定すると C D E F 3 出発駅 到着駅 のぞみ 4 1 4 運賃 特急料金 5 東京 名古屋 6090 4690 IFとVLOOKUPとMATCHを使ってみたら、こんな↓数式になりました。 =IF($E$3="のぞみ",VLOOKUP($D$5,Sheet2!$A$3:$I$6,MATCH($C$5,Sheet2!$A$1:$I$1,0)+(E4<>"運賃"),0), VLOOKUP($D$5,Sheet3!$A$3:$I$6,MATCH($C$5,Sheet3!$A$1:$I$1,0)+(E4<>"運賃"),0)) 問題設定を無視すると、名前の定義とコードの数字を使ってできたりします。 Sheet2のA1:I6に「のぞみ」、Sheet3のA1:I6に「ひかり」と名前を定義して、 =INDEX(INDIRECT($E$3),$D$4+2,$C$4*2+(E4<>"運賃")) とか・・・  # 質問文の改行を修正しました 数式もこっそり修正(^^;)  (Hatch) --------- すみません、セル番地が分かるように書き換えます。 (シート1)      A   B   C   D   E   F   G   H   I   1      新幹線料金表   2  3      コード 駅名    出発駅        運賃       4  出発駅コード        到着駅        特急料金  5  到着駅コード        車種         合計額  6  車種コード  7  8  9      コード 駅名 10      1  東京  11      2  品川  12      3  新横浜  13      4  名古屋  14      5  京都  15      6  新大阪  16      7  新神戸  17      8  姫路  18      9  岡山  19      10 福山  20      11 広島  21      12 徳山  22      13 新山口  23      14 小倉  24      15 博多  25  26     コード 車種  27      1  のぞみ  28      2  ひかり (シート2→のぞみ)   B     C     D     E     F   G    H      I 1 東京 品川 新横浜 名古屋 2 運賃 特急 運賃 特急 運賃 特急 運賃 特急 3 東京 − − 4 品川 160 2390 − − 5 新横浜 480 2390 400 2390 − − 6 名古屋 6090 4690 6090 4690 5460 4690 −− 7 (以下略→表はAF17まで)     …取りあえずこんな感じです。どうでしょうか?F3〜5、I3〜5に式を入力して、C4〜6にコードを入力すると金額が返されるようにしたいのですが。。(蘭) ---- シート2のB1セルを左上とするセル範囲の駅名がコード順に並んでいるとすると、 運賃の列番号は 駅コード*2 で出そうです。 特急利用金は 駅コード*2+1 ですね。 例えば名古屋ならコード4ですから運賃は8列目(B列から数えて)、特急料金は9列目になります。 これを使えばVLOOKUP関数だけでいけると思いますがいかがでしょう。違っていたらすみません。(純丸) ---- そうですね…純丸さんのおっしゃる通り、運賃・特急料金の列番号はそれでいけそうですが、 シート1の駅名とシート2の駅名を対応させるにはどうすれば良いのでしょうか…? I3に入れる式として、 =IF(F5="のぞみ",VLOOKUP(C4,のぞみ!$B$1:$AF$17,C4*2,0))を考えてみたのですが、 やっぱりダメです。。(蘭) ---- 駅名は最初に蘭さんが書かれたような式で良いんじゃないですか。 =VLOOKUP(B4,$B$10:$C$24,2,FALSE) (川野鮎太郎) ---- では「運賃」のところの検索値は何になるのでしょう? (蘭) ---- (*'ω'*)......ん? 運賃は純丸さんの方法でいけるんじゃないのかな・・・? それとも、ずばりの答えがほしいのかな・・? (川野鮎太郎) ---- >=IF(F5="のぞみ",VLOOKUP(C4,のぞみ!$B$1:$AF$17,C4*2,0)) =IF(F5="のぞみ",VLOOKUP(F4,のぞみ!$B$1:$AF$17,C4*2,0))  とか?  (Hatch) ---- むかし、むかし、まだINDEX関数の存在を知らない頃の事じゃった。 作業列(行)を設けて 東京  品川  新横浜 2 4 6 東京 品川 新横浜 =VLOOKUP($F$3,Sheet2!$B$3:$AF$18,HLOOKUP($F$4,Sheet2!$B$3:$AF$4,2,FALSE)+IF($F$5="特急",1,0),FALSE) こんな感じで、作ったことを思い出してしまった。 宿題は、自分でやりましょう!という事で『ズバリ言わないわよ!』  一応 IFとVLOOKUPとHLOOKUPだけ・・・(sin) 追記:=HLOOKUP(・・・VLOOKUP(・・・  にしても良いかも? お好きにどうぞ ただ、特急の処理が面倒っぽいけど 間違いを修正しました。 ---- 書き込んだ後、外に出かけたのですが途中で気がつきました。東京を検索値にしてもシート2の 東京の行には金額が入ってないので出ませんね。表の形状からは HLOOKUP関数を使いたいところですが、 特急料金の列には検索値である駅名が入っていない。蘭さんはこの事をおっしゃってるのでしょう。 となるとどうやって? 自分は、VLOOKUP・HLOOKUP・IF の3つだけでは無理なような気がしてます。 料金が、左下側でなく右上側に入力されていれば VLOOKUP関数で出来るのでしょうが、、、。 他の関数でよければ、下記で出そうです。(純丸) 運賃   =OFFSET(Sheet2!$B$2,$C$5,$C$4*2-1,1,1) 特急料金 =OFFSET(Sheet2!$B$2,$C$5,$C$4*2,1,1) ---- 皆様の意見を踏まえて考えてみましたが… =IF(C4="","",VLOOKUP($F$3,のぞみ!$B$3:$AF$17,HLOOKUP($F$4,のぞみ!$B$3:$AF$17,C4+2,0)+IF($F$5="のぞみ",1,0),0))が限界です。。#N/Aになってしまいます…。(蘭) ---- >HLOOKUP($F$4,のぞみ!$B$3:$AF$17,C4+2,0) 範囲と行番号の指定が、違うのでは? C1:AF17 の何行目? ここで求めたいのは、VLOOKUPでの列番号ですよね。 >=IF(C4="","",・・・・)+IF($F$5="のぞみ",1,0) C4が空白で無い場合は、+1が確定では? のぞみとひかりで特急料金違いましたっけ? スミマセン、物知りませんので。。。違うのであれば、それに対応する一覧表にする必要がありますよね。 運賃:=IF(OR(C4="",C5=""),"",VLOOKUP($F$3,のぞみ!$B$4:$AF$18,HLOOKUP($F$4,のぞみ!$C$1:$AF$2,2,0),0)) 特急:=IF(OR(I3="",C6=""),"",VLOOKUP($F$3,のぞみ!$B$4:$AF$18,HLOOKUP($F$4,のぞみ!$C$1:$AF$2,2,0)+1,0)) 特急料金が違う場合は、 東京      品川    新横浜      名古屋 2 5 8 11 運賃 のぞみ ひかり 運賃 のぞみ ひかり 運賃 のぞみ ひかり 運賃 のぞみ ひかり こんな感じの表になるでしょうから、 特急:=IF(OR(I3="",C6=""),"",VLOOKUP($F$3,のぞみ!$B$4:$AU$18,HLOOKUP($F$4,のぞみ!$C$1:$AU$2,2,0)+IF($F$5="のぞみ",1,2),0)) 範囲は、適当です。また、2行目に行挿入して、VLOOKUPに対応させる列番号を手入力していることが前提です。 一つ問題があります。ORも関数ですから、使用する関数条件が違っちゃいますねぇ! 未入力の場合、エラー値が出てよいのならば、 特急:=VLOOKUP($F$3,のぞみ!$B$4:$AF$18,HLOOKUP($F$4,のぞみ!$C$1:$AF$2,2,0)+IF(C6="",#N/A,1),0) とする事も可能です。 (sin) 夜更かししてしまった。 ちょっと修正。 ----- 出来ました!! =IF(C4="","",IF($F$5="のぞみ",VLOOKUP($F$4,のぞみ!$B$3:$AF$17,C4*2,0)) +IF($F$5="ひかり",VLOOKUP($F$4,ひかり!$B$3:$AF$17,C4*2,0))) で出ましたよっ(感涙)皆様ありがとうございました!!(蘭) ---- おめでとうございます。 出来たという式を見させていただいて、やっと全体のレイアウトが把握できました。 C4*2の意味も。。。一人だけオオボケしてましたね。失礼致しました。 直書き込みでは、把握できない事を痛感。(sin)