質問: 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」でなく「未入力」と表示させる方法があるとすれば、何でしょうか。 長文失礼いたしました。
回答: 参考に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(今のまま)) のようなやり口も考えられます。