こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel、リンク元に指定文字列の存在を調べたい

失礼いたします。

次のような関数式を用いて管理表を作りたいのです。

=IF(? ? ? ? ? ?,VLOOKUP(A3&B3,\○○○\△△△\[XXXXX]sheet1!$A$2:$G$20,4,false),"未入力")
   ( ※ 「○○○」の前は\ではなく\\が正しいかもしれませんが、その点は大目に見ていただきたいです)

長い関数式ですので、念のため解説をしておきます。

 ○ もし「? ? ? ? ? ?」だったら、「XXXXX」というエクセルブックの中の、「sheet1」というシートの中の、「A2~G20」の範囲の1列目(すなわち「A」の列)に、「A3&B3」と一致する文字列のセルから右に3列移動したセルを表示してください。
 ○ もし「? ? ? ? ? ?」でなかったら、「未入力」と表示してください。

ところがここで問題なのが、「XXXXX」というエクセルブックの中の、「sheet1」というシートの中の、「A2~G20」の範囲の1列目(すなわち「A」の列)に、「A3&B3」と一致する文字列のセルが存在しない場合があるのです。そこで、

 ○ もし「? ? ? ? ? ?」だったら、~~
 ○ もし「? ? ? ? ? ?」でなかったら、~~

の「? ? ? ? ? ?」には、「XXXXX」というエクセルブックの中の、「sheet1」というシートの中の「A」の列に、「A3&B3」と一致する文字列のセルが存在する、という関数を入れたいのです。そうすれば、

 1.(1つ以上)存在する → TRUEを返す → VLOOKUP関数により表示される
 2.存在しない → FALSEを返す → 「未入力」と表示される

というように管理できます。

ところが、私の現在の知識では、(1つ以上)存在すればTRUEを返す関数として、COUNTIF関数しか知らず、使いこなせません。

そこでCOUNTIF関数を使いました。次のような式です。
 COUNTIF(\○○○\△△△\[XXXXX]sheet1!$A:$A,A3&"営業")>0

関数式のすべてを書けば、

=IFCOUNTIF(\○○○\△△△\[XXXXX]sheet1!$A:$A,A3&"営業")>0
,VLOOKUP(A3&B3,\○○○\△△△\[XXXXX]sheet1!$A$2:$G$20,4,false),"未入力")
   ( ※ VLOOKUP関数の中の「B3」には、「営業」と入力されることもあれば、ほかの文字列が入力されることもあります)

すると、

 ○ 通常 : 「#VALUE」が表示されてしまいます。
 ○ 「XXXXX」というエクセルブックを開く : 実際に入力されているもの、もしくは「未入力」が表示されます。

そして、「#VALUE」が表示される理由を追いかけますと、COUNTIF関数の中の「A3」の箇所だけに下線が引かれ、この「A3」のためにエラーになっているのだとエクセルは教えてくれます。

以上を踏まえ、質問させていただきます。

 1. COUNTIF関数は、リンクが混在する関数には適さないのでしょうか。

 2. COUNTIF関数以外に、「A」列に「A3&"営業"」と一致する文字列が存在するかどうかを検索する関数があるとすれば、何でしょうか。

 3. 現在、しかたなく「=VLOOKUP(~~~~)」だけにしているのですが、「未入力」と表示させたいところに「#N/A」が表示されます。これをほかの方法で、「#N/A」でなく「未入力」と表示させる方法があるとすれば、何でしょうか。

長文失礼いたしました。

投稿日時 - 2011-01-17 00:22:17

QNo.6453316

困ってます

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

参考にExcel2007以降では,新しい関数を使い
=IFERROR(VLOOKUP(A3&B3,\○○○\△△△\[XXXXX]sheet1!$A$2:$G$20,4,false),"未入力")
のようにすっきり計算することが出来ます。


さて2003までのエクセルでは,ご相談の状況が発生します。
参考:
http://support.microsoft.com/kb/260415/ja

上述URLにCOUNTIFやSUMIFの代わりに使える数式の作成例がありますが,今回ご相談の用途ではもうちょっと別の関数を使い

作成例1
=IF(ISERROR(VLOOKUP(今のまま)),"未入力",VLOOKUP(今のまま))
作成例2
=IF(ISERROR(MATCH(A3&"営業",\○○○\△△△\[XXXXX]sheet1!$A$2:$A$20,0)),"未入力",VLOOKUP(今のまま))

のようなやり口も考えられます。

投稿日時 - 2011-01-17 00:51:35

お礼

2003以前と2007以降とで、COUNTIF関数に違いがあるとは知りませんでした。
そして、「作成例1」を採用いたしました。
誠にありがとうございました。

投稿日時 - 2011-01-17 23:27:04

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

COUNTIF関数を使うことに間違いはないでしょう。ただなぜA3&B3ではなくA3&"営業"にしているのでしょう。正しくは次のような式にすることでしょう。

=IF(COUNTIF(\○○○\△△△\[XXXXX]sheet1!$A:$A,A3&B3)>0
,VLOOKUP(A3&B3,\○○○\△△△\[XXXXX]sheet1!$A$2:$G$20,4,false),"未入力")

投稿日時 - 2011-01-17 07:15:31

補足

お尋ねの点につき、お答えします。

> ただなぜA3&B3ではなくA3&"営業"にしているのでしょう。

よくよく質問を見直しますと、私が作ろうとしたもともとの関数式は、
 =IF(COUNTIF(\○○○\△△△\[XXXXX]sheet1!$A:$A,A3&"営業")>0
,VLOOKUP(A3&"営業",\○○○\△△△\[XXXXX]sheet1!$A$2:$G$20,4,false),"未入力")
でした。それを、
(1)COUNTIF関数内でエラーが起きていた
(2)しかもそのエラーは、「A3」のほうであり、「"営業"」のほうではなかった
というところが強烈に記憶に残っていましたため、COUNTIF関数内でのみ「A3&"営業"」としていたものだと記憶違いを起こしてしまったからです。

> 正しくは次のような式にすることでしょう。

あなたは、A3&B3にしていないのが最大の間違いだとお思いなのですか。
今回私はExcel2003を使っている中で困って、このたびの質問を投稿したのです。
なのにあなたは、Excel2007以降でなければ使えない関数式を正しいものとして示されました。
前提が狂ってしまいますと答えまで狂ってしまいますよ。

> 正しくは・・・

あなたは、「正しい」の意味を知っていますか?
あれも正しい、これも正しい、・・・。こんな場合、「正しい」とは言いません。「1つの考え」というのです。「正」という字は「一」に「止まる」と書きます。字の成り立ちからして、正しいものは1つしかなく、2つも3つも正しいなんてありえないのです。
あなたが示した関数式は、たった1つしかない正しい関数式ですか。最初に回答を下さった方はCOUNTIF関数を使えない場合の対処法だけでなく、自ら2つの例をも示されました。
知識人は、良い意味でも悪い意味でも、「世の中に正しいものなどない」、「それも1つの考え」と考えるのが常識です。「正しい」という言葉をもっと慎重に使うことをお勧めします。

投稿日時 - 2011-01-17 23:59:10

あなたにオススメの質問