エクセルのVLOOKUP関数について教えてください

このQ&Aのポイント
  • エクセルのVLOOKUP関数について教えてください。
  • VLOOKUP関数は、指定した値と一致する範囲内の値を検索し、関連する値を返す関数です。
  • しかし、一つの対象に対し複数の対象が一致する場合、VLOOKUP関数は勝手に選択してしまいます。そのため、エラーを出すように設定することは可能です。
回答を見る
  • ベストアンサー

エクセルのVLOOKUP関数について教えてください。

エクセルのVLOOKUP関数について教えてください。 まずは、添付画像を参照下さい。 元データ(B2:D6)に対し、C10でVLOOKUP関数を以下の通り使用しました。 =VLOOKUP(B10,B2:D6,2,FALSE) この場合、新品番57010に対し、旧品番が3パターンありますが、VLOOKUP を使用すると、その3パターンのうちいずれか(数値の小さいもの?)を勝手に 選択してしまうため、困っています。 このような一つの対象に対し、複数の対象が一致するものについては、 エラーの出るようにしたいのです。(作業上のミスを防ぐため) そういったことは可能でしょうか。 あるいは関数の特性上仕方のないことなのでしょうか。 説明下手ですみませんが、よろしくお願いします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 複数ある場合は全てを表示するのではなく、単に複数あることが判断できれば良いわけですよね? 一応そういうことだとして・・・一例です。 ↓の画像で左側がSheet1でSheet2に表示するようにしてみました。 Sheet2のB2セルに =IF($A2="","",IF(COUNTIF(Sheet1!$A:$A,$A2)=0,"該当なし",IF(COUNTIF(Sheet1!$A:$A,$A2)>1,"複数あり",VLOOKUP($A2,Sheet1!$A:$C,COLUMN(B1),0)))) という数式を入れ、列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 以上、参考になれば良いのですが・・・m(__)m

mame1218
質問者

お礼

ありがとうございました。 大変わかりやすかったため、 BAとさせていただきました。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

C10セルに入力した式は=VLOOKUP(B10,B2:D6,2,FALSE)とのことですね。 C10セルからD10セルにオートフィルドラッグして下方にもオートフィルドラッグしてその式を使用するのでしたらC10セルに入力する式は少なくとも次のようにすることが必要ですね。 =VLOOKUP($B10,$B$2:$D$6,COLUMN(B2),FALSE) セル番地については一部で絶対参照の形になっています。ドラッグコピーしてもセル番地が変わらないようにするために$マークを使います。さらに引数2の部分はCOLUMN(B2)と入力して式がD10セルにドラッグコピーされれば引数が自動的にCOLUMN(C3)に変わり3に変わるようにしています。 また、B10セルから下行のセルが空の場合にはエラーが表示されますのでさらに次のような式にすることが必要ですね。 =IF($B10="","",VLOOKUP($B10,$B$2:$D$6,COLUMN(B2),FALSE)) さらに、B10セルから下方にセルにデータが入力されてもそのデータがB2セルからB6セルの間に無ければエラーが表示されますね。該当する数値が無い場合にはC10セルやD10セルを空の表示にさせるのでしたら次のような式にします。 =IF($B10="","",IF(COUNTIF($B$2:B$6,$B10)=0,"",VLOOKUP($B10,$B$2:$D$6,COLUMN(B2),FALSE))) ところでこの式を使ってもB10セルの値がB2からB10セルに複数ある場合には上から最初に検出されたところの行が答えとして表示されることになります。 同じデータが複数ある場合ですが、複数あるかどうかはCOUNTIF関数を使って調べることができますので次のような式にしてはどうでしょう。 =IF($B10="","",IF(COUNTIF($B$2:B$6,$B10)=0,"",IF(COUNTIF($B$2:$B$6,$B10)>1,"複数",VLOOKUP($B10,$B$2:$D$6,COLUMN(B2),FALSE)))) 同じデータが幾つあるかを表示させたい場合には例えば次のような式にします。 =IF($B10="","",IF(COUNTIF($B$2:B$6,$B10)=0,"",IF(COUNTIF($B$2:$B$6,$B10)>1,"複数:"&COUNTIF($B$2:$B$6,$B10),VLOOKUP($B10,$B$2:$D$6,COLUMN(B2),FALSE))))

mame1218
質問者

お礼

回答ありがとうございました。 大変参考になりました。 BAにするかどうか大変迷いました。

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.2

>このような一つの対象に対し、複数の対象が一致するものについては 無理でしょう。VlookUp関数は参考書の索引みたいなもので 一つの単語に対して取り扱っているページが「,」で区切って書いてありますね どのページを見るかは読者の勝手です。 最初に索引テーブル[B3:D6]を整理しておきましょう ・索引部分[B3:B6]はユニークに ・参照部分[C3:C6]及び[D3:D6]は複数のものを[,]で区切って列挙します [443100,443101] 尚,ご存知とは思いますが C10の式は次行へ コピペ するためにテーブル部分は 絶対アドレスに =VLOOKUP(B10,$B$2:$D$6,2,FALSE)

mame1218
質問者

お礼

ありがとうございました。 参考にさせていただきました。

関連するQ&A

  • ExcelでのVLOOKUP関数について

    キー1を1000倍したうえで完全一致のVLOOKUP関数を使うと#N/Aエラーが発生します。 表示上は同じように見えますが内部的に異なる値となっているのでしょうか? 試しにエラー行に対して、キーとターゲットとなる当該セルを「=」でつないで確認しても「TRUE」となります。 添付画像は、 検索先としてA列に基準キーを130.168~130.192(step 0.001)で各行へ入力し、B列はA列を1000倍、C列はB列をROUND関数で整数値に丸めたものをキーとしました。 D列にVLOOKUPで参照する値を入力し、E列以降で以下の異なるパターンで値を参照しています。 (1)【E・F列】 ・E列に整数値をキーとして130168~130192(step 1)で入力。 ・E列をキーとしてB~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,B:D,3,FALSE)』 (2)【G・H列】 ・G列にE列/100をキーとして計算。 ・G列をキーとしてA~D列のVLOOKUP関数としています。   『=VLOOKUP(G3,A:D,4,FALSE)』 (3)【I列】 ・E列をキーとしてC~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,C:D,2,FALSE)』 シートを複製し、キーの入力範囲を0.001~0.025(E列は1~25)にした場合はエラーがでませんでした。 その他の確認としてはTEXT、JIS、ASCなどを組み合わせて文字列としたキー同士のVLOOKUPではエラーにならず値を参照できています。

  • エクセル 関数 ISERROR VLOOKUP

    エクセル関数でご教授お願いします。 今「LIST」シートのA列に品番、B列に単価が入力されています。 これを「入力」シートのA列1行目に品番を入力して、B列1行目に単価を引っぱってくる関数を作りました。 以下関数です。(「入力」シートのB列の関数です) =IF(ISERROR(VLOOKUP(A1,LIST!$A$1:$B$3,2,FALSE)),"品番ミス",VLOOKUP(A1,LIST!$A$1:$B$3,2,FALSE)) 品番が間違っている場合は”品番ミス”と入力されます。 この状態で問題なのは、入力シートのA列に何も入力されていない時に、B列に品番ミスと入ってしまう事です。 何とか、空白にしたいのですがいい方法はありませんでしょうか?

  • VLOOKUP関数 エクセル関数教えてください

    =IF(ISERROR(VLOOKUP(B2,$E$1:$F$296,2,FALSE)),"",VLOOKUP(B2,$E$1:$F$296,2,FALSE)) という関数を入れて、品番をセルに入力して元表から品名を導く表を作成しました。うまく使えています。 これを元に =IF(ISERROR(VLOOKUP(B2,$F$1:$I$1000,2,FALSE)),"",VLOOKUP(B2,$F$1:$I$1000,2,FALSE)) という関数に直して、同じような表を作ろうとしたのですが、うまくいきません。 何が悪いのか分かりません。 どうすればうまくいきますでしょうか?

  • エクセルのVLOOKUP関数について

    エクセルのVLOOKUP関数を使用しての集計に関する質問です。 以下の例のような場合の関数が分からず本当に困っております。 どなたかご享受いただけたら幸いです。 よろしくお願いいたします。 毎月サポート費としてお客様ごとに定額が振り替えられ、その集計表を作成しております。 その際振替に使用するプランが2パターンあり、その月どちらのプランになるかは月によってまちまちです。 (同じお客様でも3月はパターン1、4月はパターン2だったりします。) また、振替日は使用するパターンによって異なります。 SHEET1に、 A列 B列 C列 D列 顧客名 金額 振替日 パターン名 という表があり顧客ごとの過去2年分の振替履歴が、1000レコード程並んでいます。 SHEET2でSHEET1の月ごとの集計を出そうと考えております。 表自体は月ごとに分けて作成したいので、表の上部に該当期間をつけます。下記のような感じです。 B2セル C2セル D2セル ○月 開始日 末日 (ex2月) (ex.11/2/1) (ex.11/2/28) A列:顧客名 B列:パターン名 C列:振替日 D列:金額 と並べ、顧客名ごとに、その月のパターン名・振替日・金額を集計したいです。 金額に関しては、SUMIFS関数、振替日に関しては使用パターンさえ出せれば、IF関数で出せると考えています。 パターン名のところでつまづいてしまっています。 行いたいこととしては、SHEET1のA列からD列(顧客名からパターン名まで)の範囲で、顧客名が一致したときに、振替日を抜き取り、振替日がC2(月初日)より大きく、かつD2(月末日)より小さいときのパターン名を表示させたいです。 (1)---------------------------------------------------- =IF(VLOOKUP(A3,sheet1!$A$2:$D$1000,3,FALSE)>$C$2,IF(VLOOKUP(A3,sheet1!$A$2:$D$1000,3,FALSE)<$D$2,(VLOOKUP(A3,sheet1!$A$2:$D$1000,4,FALSE)),"")) といれると、表示されるきちんとパターン名が表示されるセルと空白が返ってきてしまうセルがあります。 空白が返ってきてしまうセルは、双方の顧客名の最後の1文字を消す、スペースを入れる、など何かしら手を加えるときちんと表示されます。 ------------------------------------------------------ その他、VLOOKUP関数、IF関数、ISNA関数などを組み合わせて色々と試してみましたが期間がうまく指定出来ていないようで、当月に振替履歴のない顧客の欄にもパターンが返ってきてしまいます。 下記を教えていただきたいです。 (1)(1)のような状態になる理由と解決法 (2)この場合に使用するのに最適な式 説明が長くなり、またうまく状況を説明できず申し訳ございません。 本当に困っています。ご回答よろしくお願いいたします。

  • vLOOKUP関数の仕様

    VLOOKUP関数で検索値が検索対象に複数あるときに検索の型をfalseにすると 例えば E列に検索値のリストがありA列が検索対象になりC列が返す数値があるとすると =VLOOKUP(E1,$A$1:$C$1000,3,FALSE) という風にすると返す数値が A列で一番上にある一致行のC列を返す。 A列で検索値が一致する中でC列の値が最も少ない数値を返す。 のいずれかに見えるのですがこれは仕様として正しいのでしょうか?それとも、私の勘違いでしょうか? ちなみに、上記二つの仕様のうちどちらでも影響が無いんです。C列の数値が連番(時々欠番がありますが)ですので。

  • VLOOKUP関数のコピーについて

    お世話になっております。VLOOKUP関数を違うセルにコピーするのですが、参照するセルが替わりません。。#N/Aエラーが出てしまいます。たとえば、=VLOOKUP(B24,M3:N21,2,FALSE)をコピーして、違うセルに貼り付けても、=VLOOKUP(B24,M3:N21,2,FALSE)。また、オートフィルでやると、参照範囲もずれてしまいます。上手にコピーする方法はないのでしょうか。よろしくお願いします。

  • IFとVLOOKUP関数を組み合わせて

    IFとVLOOKUP関数を組み合わせて条件に一致させた数値を出したいのですが引数の記述がわかりません具体的にはセルB5の値が2以上10未満の時は4,100を10以上15未満の時は6,500を15以上25未満の時は11,300を25以上35未満の時は16,100を35以上45未満の時は20,900をセルD5に標示させたい時はどんな記述をすればよろしいでしょうか?IF関数VLOOKUP関数を用いて別のセルにこの参照をさせる表(セルA7に2,B7に4,100 A8に10,B8に6,500 A9に15,B9に11,300…)を作成するすればできると思うのですが…

  • vlookup関数について

    vlookup関数について教えてください。    A       B         C      D      E        1  あじ    りんご     2  さば    みかん            3  さんま   ばなな        という内容で、D1セルに入力した内容に応じてE1セルに内容を転記させていました。 E1=VLOOKUP(D1$A$1$B3,2,FALSE) 上記で運用していたときはうまくいったのですが、 Cの列にも文字をいれ、E1セルにはCの内容を検索して、B列の内容を転記したいと 思って作りかえるとうまくいきません。 今回の新しいやり方では、 ・A列からの検索はいらない(でも他ファイルから参照されているので、削除、移動はできない) ・E1=VLOOKUP(D1$A$1$C2,2,FALSE)では #N/A となる ・A列からの検索がいらないから、E1=VLOOKUP(D1$B1$C2,1,FALSE) でも #N/A 調べてみたのですがわからなくて・・・ どこがおかしいのか、教えてください。宜しくお願いします。

  • エクセル VLOOKUP関数IFERRORと組み合

    ExcelのVLOOKUP関数でエラーのときは空白にする方法で紹介されているモノに セルに「=IFERROR(VLOOKUP(D2,A2:B6,2,FALSE),"")」を入力して、Enetrを押します。 とありますが、この場合、VLOOKUP関数の前に、実際にキーボードで=IFERRORと打ち込みますか? 簡単にできる方法があれば教えて下さい。

  • VLOOKUP関数が#N/Aで使えません

    こんにちは。 エクセルで表を作っています。 VLOOKUP関数を使いたいのですが、エラー#N/Aが出て使えません。とてもシンプルな式なのに、何がだめでできないのか全く解かりません。 式は、=VLOOKUP(C3&D3,A7:D12,4,FALSE)です。 ちなみに、=VLOOKUP(C2,B7:D12,3,FALSE)にはちゃんと反応して数値を返してくれます。違いは検索値だけなのですが、数字になっているので、文字列に指定もしました。違うセルで=C3&D3は返してくれています。 何がいけなくてできないのか、教えていただけると助かります。 よろしくお願いします。

専門家に質問してみよう