- ベストアンサー
VLOOKUPがうまく行かない
VLOOKUP関数でSheet1のA2セルに=VLOOKUP(B2,Sheet1!$A$1:$B$22,1)と入力すると、012というコードが変えてこないといけないのですが、Sheet1の1行目の最終行のデータを持ってきてしまいます。昇順に並べ替えもしているのに、何故でしょうか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
"VLOOKUP"関数の参照の仕方が違います。 =VLOOKUP(検索値,検索範囲,列番号) 『検索値』は『検索範囲』の1列目になければいけないのです。 ANo#1のお礼欄を例にすると、 Sheet1 A B 1 コード 名称 2 電話 3 テレビ 4 インターネット ・ ・ Sheet2 A B 1 インターネット 012 2 テレビ 254 3 電話 894 です。
その他の回答 (7)
- nishi6
- ベストアンサー率67% (869/1280)
<Sheet1> A B --------- 1 コード 名称 2 式 電話 3 テレビ 4 インターネット <Sheet2> A B --------- 1 コード 名称 2 012 インターネット 3 254 テレビ 4 894 電話 今はこうなっているのでしょうか。 VLOOKUPを使うなら、Sheet2のコードと名称の列順を入れ替えて、 =VLOOKUP(B2,Sheet2!$A$2:$B4,2,0) とします。ソートしておく必要はありません。 また、Sheet2のカタチを変えなくても、 =INDEX(Sheet2!$A$2:$A$4,MATCH(B2,Sheet2!$B$2:$B$4,0)) のようにして参照可能です。 MATCH関数で探して、INDEX関数で持ってきています。 利点は、参照列が左端にある必要がないので、1つの表を複数の用途に使えます。 また、Sheet2の『コード』、『名称』列に他のデータを入力しないなら、 =VLOOKUP(B2,Sheet2!A:B,2,0) =INDEX(Sheet2!A:A,MATCH(B2,Sheet2!B:B,0)) のようにすれば、『コード』、『名称』が増えても参照範囲を修正する必要はありません。
- MSZ006
- ベストアンサー率38% (390/1011)
#4のご回答のとおりだと思います。sheet2のテーブルの作り方を変更する必要があると思います。(A列に名称、B列にコード という並びにする) そして算式を =VLOOKUP(B2,sheet2!$A$1:$B$22,2,FALSE) とすればよいと思います。
先程、回答致しましたlivertyです。 jinahさんからは、訂正の情報を送って頂きましたが、正しいVLOOKUPテーブルはNo4のdeadlineさんの通りと思います。 式は=vlookup(B2,sheet2!A$1:B$3,2,FALSE)になります。 式の説明をしますと、SHEET1のB2を検索値として、SHEET2のセルA1からB3をVLOOKUPテーブルとし、このテーブルのA1~A3と検索値を比較し、完全に一致した場合のみ、SHEET2のB1~B3のコードを結果として返します。(FALSEオプションを付加している為に完全一致のみ結果を返します) この式はSHEET1のA列に入力しますので、VLOOKUPテーブルの範囲式が「A$1とB$3」になっています。 そして、このVLOOKUPテーブルで動作を見ますと、SHEET1のB2セルに「=VLOOKUP(B2,Sheet2!A$1:B$3,2,FALSE)」と入力すると、この場合は、電話を検索値としますから、SHEET2のVLOOKUPテーブルを参照しますと、検索値「電話」に対応するコードは894になります。 jinahさんが希望されるコード012は、名称が「インターネット」の場合ですから、電話を検索値とした場合はセルB2には894が返ってくるのです。
- imogasi
- ベストアンサー率27% (4737/17070)
(1)Vlookupは第4引数がTrueの時は表はソート されている必要あり。本件はFalseの例で関係無し。 Faleは1でしたっけ。いつもFalseとかいているので。 (2)B2と同じ性格のデータが表Sheet2!$A$2:$B3の最左列にある必要があるようです。したがって第3引数は1はおかしい。(最左列が1で始まるのではなかったですか。)チェックした値を取ってきても仕方が無い。2,3・・が普通来るはず。「2」がただしいのでは。 それと#1の補足のSheet2!$A$2:$B3は3に$が漏れていませんか。
- DQN
- ベストアンサー率24% (32/131)
もう一度式をご確認ください。 VLOOKUPが検索する範囲にA2が含まれていますので、最初に式を入力してEnterキーを押した瞬間に循環参照を危惧するダイアログが出てしまいます。 ひょっとしてそれを無視して先に進みませんでしたか?
ご質問では、「Sheet1のA2セルに=VLOOKUP(B2,Sheet1!$A$1:$B$22,1)」となってますが、A2セル及び検索値セルであるB2セルは、VLOOKUPテーブルの一部になっており、これでは、「循環参照」エラーになってしまうと思うのですが、VLOOKUPテーブルは、SHEET1のA1~B22なのでしょうか?
補足
すいません!質問時の式の入力が間違えて増した。 Sheet1 A B 1コード 名称 2 電話 3 テレビ 4 インターネット ・ ・ とありSheet2は A B 1 012 インターネット 2 254 テレビ 3 894 電話 とあります。 でSheet1のA2に=VLOOKUP(B2,Sheet2!$A$2:$B3,1)と入寮するとA2には012と入るはずが894を持ってきてしまうんです。VLOOKUPは何度も使用してきた関数ですが,こんなことは初めてです。よろしくお願いします
- MSZ006
- ベストアンサー率38% (390/1011)
その算式ではA列から値を持ってきますがそれでよいのでしょうか?(範囲指定$A$1:$B$22の意味が不明です。$A$1:$A$22で事足ります。) また、算式の入っているA2セルが検索範囲に含まれていますが良いのでしょうか? 差障りなければ具体的な入力値(A列、B列)を教えてください。
補足
すいません!質問時の式の入力が間違えて増した。 Sheet1 A B 1コード 名称 2 電話 3 テレビ 4 インターネット ・ ・ とありSheet2は A B 1 012 インターネット 2 254 テレビ 3 894 電話 とあります。 でSheet1のA2に=VLOOKUP(B2,Sheet2!$A$2:$B3,1)と入寮するとA2には012と入るはずが894を持ってきてしまうんです。VLOOKUPは何度も使用してきた関数ですが,こんなことは初めてです。よろしくお願いします
お礼
ありがとうございます!! いつも検索値が左にあった為、今回のような場合は気づきもしませんでした。これから関数をもっと理解し応用できるように励みます!本当にありがとうございました。