- ベストアンサー
VLOOKUP の、エラーコードを出さずにもとのデータのままにしたい。
WIN XP EXCEL2002 sheet1 A B C 30 りんご 300 20 みかん 350 10 ばなな 200 sheet2 A B C りんご 48 350 みかん 50 350 りんご 55 200 sheet1 の、A列に、 =VLOOKUP($B1,sheet2!$A$1:$C$10,2,FALSE) とすると、 sheet1 A B C 48 りんご 300 50 みかん 350 #N/A ばなな 200 となるのですが、このばななのところのエラーコードを出したくないので、もとのまま、すなわち 10 になるようにしたいのですが、 どのような式にかえればよいでしょうか?よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
A列を書き換えた時点で元の値(10)はどこにも記憶されていないので、 数式の中にそれぞれ元の値を持たせてやる必要があります。 (=この時点で数式が便利なものでなくなってしまいますが・・・) 元の値を書き換えることなく、ほかの列を使用するのが賢明ですが どうしてもというならば、下のように「VLOOKUPがERRORであれば 元の値、ERRORでなければVLOOKUPの結果」とすれば可能です。 (1個目と2個目のVLOOKUPの間の"10"が元の値です) =IF(ISERROR(VLOOKUP($B1,sheet2!$A$1:$C$10,2,FALSE)),10,VLOOKUP($B1,sheet2!$A$1:$C$10,2,FALSE))
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
バナナのように表にないものが出現したとき、 >もとのまま、すなわち 10 になるようにしたいのですが という意味が、特殊で判りにくい。10はバナナでも、柿でも10でよいのですか。そんなケースは想像しにくいのだが。 そもそも、SheetのA列の値は何の値? 普通は空白列にVLOOKUPで引いた値をセットするもの。 元のA列の値が壊れても良いのですか。関数を入れると、元の値はつぶれるのですよ。 A1セルに数があるとして、=IF(B1>10,A1,1)はそもそもおかしい。 ーー 該当なしの場合一律に10なら ISERRORで聞いて、IFで判別し、真の場合は10、そうでなければVLOOKUP関数値をセット。 10が色々有るなら、別列にA列をコピーして、VLOOKUP関数の値がエラーだったら、コピーしたほうを持ってくるとか。
お礼
ご回答ありがとうございます。 疑問点、ごもっともです。 A列というのは、コードナンバーです。不ぞろいなのは、他の条件でソートをかけたり省いたりした結果、そうなってしまっているのです。 そして、もとのまま・・・というのは、要するにデータが数式を入れた場合にエラーになるなら、入れる前のままの状態=もとのまま にしておきたい、ということなのです。だから、10に限らずさまざまです。 わかりにくい説明ですみませんでした。 しかし、 >該当なしの場合・・・ という部分のコメントは、参考になりました。そのとおりにやってみることにしました。 ありがとうございました!
- mshr1962
- ベストアンサー率39% (7417/18945)
方法はいくつかあります。 =IF(ISNA(VLOOKUP($B1,sheet2!$A$1:$C$10,2,FALSE)),10,VLOOKUP($B1,sheet2!$A$1:$C$10,2,FALSE)) または =IF(ISERROR(VLOOKUP($B1,sheet2!$A$1:$C$10,2,FALSE)),10,VLOOKUP($B1,sheet2!$A$1:$C$10,2,FALSE)) としてエラー時に対応するか =IF(COUNTIF(sheet2!$A$1:$A$10,B1),VLOOKUP($B1,sheet2!$A$1:$C$10,2,FALSE),10) として先に検索値の有無を確認する方法
お礼
そんなにもやりかたがあるのですね。 いろいろお忙しいなか、ありがとうございます! 他の数式もためしてみます!
お礼
さっそくのご回答ありがとうございます。 そうなんですね、数式を入れてから元の値をまた呼び出すのは、 循環参照するようになってしまいますね。 結局、他の列にあらかじめA列をコピーしておいて、 教えていただいた数式の中の、10 にあたるもとのデータを 他の列から参照するようにもってきました。 ありがとうございました!