- ベストアンサー
VLOOKUP関数について(初心者です)
エクセルで <sheet1> A B C 1 1 2 2 3 3 <sheet2> A B C 1 1 りんご 3/1 2 2 みかん 3 3 いちご 3/20 というファイルがあります。 そこで <sheet1>のB1 のセルに =VLOOKUP(A1,sheet2!A:C,3,0) という関数を入れます。 (この例ではsheet1と2は同じになってますが 実際はセルの大きさや行が違います。 つまり、sheet2で入力したものを sheet1でまったく違う形にしてプリントアウトしたいんです) 【ここからが質問です】 上記の場合で、 sheet2のC列に何も入力されていないとき sheet1のB1に何も表示しないようにできますか? 現在は#N/Aとなっています。 よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#N/Aは、検査値が範囲の最左列に無いときに表示されます。 例でいうとSheet2のA列に無いときです。 #N/Aの対処は、下記で如何でしょう。 =IF(ISNA(MATCH(A1,Sheet2!A:A,0)),"",VLOOKUP(A1,Sheet2!A:C,3,0))
その他の回答 (6)
- nobu555
- ベストアンサー率45% (158/345)
ANo.1です。 先の回答は質問の趣旨と違うようですので 改めて回答します。 >そこでB列1行目に「=VLOOKUP(A1,sheet2!A:C,3,0)」と入れて >2行目3行目にコピーしたんですが >現在、B列2行目に#N/Aが出てしまうんです。 "2"を検索したときに "2"はあるが、参照先のC列が空白なので #N/Aが返ってくると思われているようですが、 違います。 見た目に"2"でも、書式の違い(数値と文字列)や 全角と半角、不要なスペース等で、 検索自体が不一致で#N/Aが返ります。 下記数式をどこかの列に入力して =MATCH(A1,Sheet2!A:A,0) 数値が表示されますか。 もし、#N/Aが返るようでしたら、 検索値が、範囲内に無いことを意味しますので、 一度、データを確認してください。
補足
>"2"はあるが、参照先のC列が空白なので >#N/Aが返ってくると思われているようですが、 >違います。 そう思ってました。違うんですね。 >下記数式をどこかの列に入力して >=MATCH(A1,Sheet2!A:A,0) >数値が表示されますか。 数値が表示されました。 ということは検索値が範囲内にあるということ…で良いんでしょうか?
- hama666
- ベストアンサー率54% (12/22)
#2です。 既に解決したようですが補足です。 B2以降はオートフィルで数式をコピーすれば自動でC2C3は参照すると思いますが。
補足
例にしたsheetは簡単に表記してあるんですが 実際は sheet1のA列1行目「1」に変更はないんですが sheet2の「1」は18行目だったり220行目だったりするんです。 (毎回、変更します) sheet2に、ずらずら~っといろんな項目が入っていて それを選んだ行だけsheet1に表示させたいんですね。 そして教えていただいた関数をコピーすると参照する場所が C2C3と決まってしまうんです。 わかりにくくてすみません。
- imogasi
- ベストアンサー率27% (4737/17069)
Sheet1で 例データ A列 B列 C列 1 2008/3/1 2008/3/1 2 1900/1/0 3 2008/3/14 2008/3/14 ーー Sheet2 1 りんご 2008/3/1 2 みかん (内容は空白) 3 なし 2008/3/14 ーーー B1には =IF(VLOOKUP(A1,Sheet2!$A$1:$C$3,3,FALSE)="","",VLOOKUP(A1,Sheet2!$A$1:$C$3,3,FALSE)) ーー C列は(不適当例だが参考に) =VLOOKUP(A1,Sheet2!$A$1:$C$3,3,FALSE) 変に式を立てると エクセルの「データは出来るだけ数にする」という強い横からの力で 空白ーー>0-->日付書式の場合1900/1/0になってしまうようだ。 ーーー >現在は#N/Aとなっています。 普通にやると上記C列のようになると思うが、どういう式だろうか?。
補足
私がやりたいと思っているのは以下の通りです。 <sheet1> A列 B列 C列 1行目 1 2行目 2 3行目 3 <sheet2> A列 B列 C列 1行目 1 みかん 3/1 2行目 2 りんご 3行目 3 いちご 3/20 これで<sheet1>のB列に関数を入れて A列 B列 C列 1行目 1 3/1 2行目 2 3行目 3 3/20 こういう風にしたいんです。 そこでB列1行目に「=VLOOKUP(A1,sheet2!A:C,3,0)」と入れて 2行目3行目にコピーしたんですが 現在、B列2行目に#N/Aが出てしまうんです。 説明がわかりにくくてすみません。
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 =IF(VLOOKUP(A2,Sheet2!A:C,3,FALSE)<>"",VLOOKUP(A2,Sheet2!A:C,3,FALSE),"") >現在は#N/Aとなっています。 ⇒シート1のA1内容がシート2のA列上にないという事で、C列の空白とは関係ありません。
お礼
<> これを使うなんて思いつきもしませんでした。 こういう方法もあるんですね。ありがとうございます。
- d1black
- ベストアンサー率0% (0/1)
IsError(□)という関数があって、□がエラーである場合に、「True(真)」を返す関数です。 単にエラーをなくしたいときに、私はよく使います。 質問の場合だと次のようになります。 =If(IsError(Vlookup(A1,sheet2!$A&1:$C$3,3,0)),"",Vlookup(A1,sheet2!$A&1:$C$3,3,0))) こうしておけば、エラーがでたら””(何も表示しない)になります。
お礼
ISERROR という関数は知りませんでした。 すごく使い道がありそうですね。 ありがとうございます。
- hama666
- ベストアンサー率54% (12/22)
=VLOOKUP(A1,sheet2!A:C,3,0) を以下の式で入れ替えてください。 =IF(Sheet2!C1="","",VLOOKUP(A1,Sheet2!A:C,3,0)) 「C1が空欄なら空欄を表示」というIF文です。
お礼
私の説明が不十分だったようなんですが、 この関数だと C1が空欄かどうかだけを参照して C2やC3は参照してくれませんでした。ごめんなさい。
お礼
できました! ありがとうございます。