• ベストアンサー

エクセルのIF関数でVLOOKUPを論理式で

こんにちは IF関数を勉強しています、過去の質問履歴のQNo.2489708を参考にさせて頂きましたが私の思うような結果が得られないので教えていただければと思います。 ■数式が=IF(A1="","",IF(VLOOKUP(A1,B3:B5,1,FALSE)=A1,C3,D3)) ■内容ですが 第1のIFで A1はブランクで真 偽の場合次のIF関数 第2のIFで 論理式を使い、A1の値がB3~B5の値と同じ場合と表現し       真の場合C3 偽の場合D3 C3のセルにはOK D3はNGと入っています ■結果  A1に入力した値とB3~B5の数字が合えば『OK』を返してくれるのですが  それ以外の場合のD3の値『NG』を返してくれなく#N/Aを返してきます。 数式がやはり違うのかなー  ■試した事  『OK』と『NG』をセルで指定しているのでここを単純に,"OK","NG"としてみましたが結果は同じでした・・・ ■合わせて  B3~B5のセル書式設定が文字列の場合(01234などの0を先頭に表示する場合セルの書式設定を文字列にしています)は特別な関数を入れ子するのでしょうか? ■いろいろ参考書を買って確認しましたが同じようなケースは無いようです。 ■VLOOKUPを使う理由  じつは、商品毎に別シートへ台帳を作り管理しています。  例えば、『シート名お菓子』に商品コードが無い場合『シート名飲料』を見に行く様にしたいのです。  商品はなるべくコード(数字)にしているのですが、0ゼロから始まる商品コードもあるので四苦八苦考えています・・・このIFとVLOOKUPを使うと幅が広がると思い夢を描いています。その他にMATCH関数でも考えましたが上手く結果が得られず困っています、どうぞ宜しくご教授ねがいます。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

おっしゃる内容なら式は =IF(A1="","",IF(ISNA(VLOOKUP(A1,B3:B5,1,FALSE)=A1),D3,C3)) だと思います。 MATCH関数で =IF(ISNA(MATCH(A1,B3:B5,0)),D3,C3) の方が簡単だと思いますが。

hige_hige
質問者

お礼

merlionXX様 すばやい解答ありがとうございます。 結果確認しました。 完璧でした。 ・・・これは基本?でしょうか?参考書に無いですが それよりも なぜD3とC3が反対?なのでしょう?? C3のセルにはOK D3のセルにはNG ISNA関数でチェックしているのですね?でも IF(チェック(VLOOKUPで真の値))チェック真はC3,偽はD3と 考えてしまいますが・・

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

#1です。 さきほど回答した=IF(A1="","",IF(ISNA(VLOOKUP(A1,B3:B5,1,FALSE)=A1),D3,C3)) ですが、hige_higeさんのオリジナルの式をそのままいかしてVLOOKUP(A1,B3:B5,1,FALSE)=A1としましたが、やはり=A1は不要ですね。#N/Aエラーにならない限り、VLOOKUP(A1,B3:B5,1,FALSE)の答えはA1に決まっているのですから、 =IF(A1="","",IF(ISNA(VLOOKUP(A1,B3:B5,1,FALSE)),D3,C3)) ですね。 >なぜD3とC3が反対?なのでしょう?? ISNAで答えが逆転しているからです。 ISNA関数は#N/Aエラーの場合にTRUEを返します。したがって#N/Aエラーの場合D3の「NG」を返すのは「真」です。

hige_hige
質問者

お礼

merlionXX様 たびたびありがとう御座います。 >ISNA関数は#N/Aエラーの場合にTRUEを返します。 勉強なりました、IS関数ではISBLANK、ISERROR、しか知りえませんでした。 改めてですが書籍では無い事でも(勉強不足でもあります)、ネットを通じてこうも知識があふれて、このような場にとても感謝する次第であります。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

=IF(A1="","",IF(VLOOKUP(A1,B3:B5,1,FALSE)=A1,C3,D3)) の ●=IF(A1="","",・・はA1が空白なら空白のまま それ以外の場合い ●IF(VLOOKUP(A1,C,1,FALSE)はAにつきB3:B5を引き、あればその列行を返す。 このB3:B5は絶対番地にしておかないと、式を複写したとき危ないですよ。 また存在しない・見つからない場合はエラー(#N/A)をVLOOKUP関数は返すので、それを捉えるには、IFだけでなく、IF(ISERROR(VLOOKUP(・・としないといけない。 エラーを捉えるにはISERRというのもあるが、#N/A以外を捕らえるということなので、不適。 FALSE)=A1は理解に苦しむ表現。存在するかどうかを聞いていてまたA1と等しいかは屋上屋と思う。 存在するかどうかならMATCH関数でエラーになるかどうかを聞く手もあります。

hige_hige
質問者

お礼

imogasi様、ありがとうございます。 VLOOKUPのエラーを捉え、その条件をIFで判定するのですね? FALSE)=A1は参考書にあった表現式で、VLOOKUPの結果が入力値と同じか再度確認しているのでしょう・・確かに等しい場合判定する、そのためのIFで短く出来るのかな?

関連するQ&A