Excelの管理表作成における関数式とエラーの解決方法

このQ&Aのポイント
  • Excelの管理表作成において、特定の条件に基づいてリンク元に指定文字列の存在を調べる必要があります。
  • COUNTIF関数を使用して、指定文字列が存在するかどうかを確認する方法を試みましたが、混在する関数には適さないことがわかりました。
  • 指定文字列の存在を確認するための他の関数はありますか?また、未入力の場合に「#N/A」ではなく「未入力」と表示する方法はありますか?
回答を見る
  • ベストアンサー

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」でなく「未入力」と表示させる方法があるとすれば、何でしょうか。 長文失礼いたしました。

noname#138471
noname#138471

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

参考に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(今のまま)) のようなやり口も考えられます。

noname#138471
質問者

お礼

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

その他の回答 (1)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.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),"未入力")

noname#138471
質問者

補足

お尋ねの点につき、お答えします。 > ただなぜ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つの考え」と考えるのが常識です。「正しい」という言葉をもっと慎重に使うことをお勧めします。

関連するQ&A

  • excelで文字列を検索する関数を教えてください。

    いつもお世話になります。 エクセルの関数で、シートAのセルA1に入っている文字列をシートBのC列から探し出し、同じ文字列があればTrueをなければFalseを返す関数を教えてください。 わからないながらも色々調べてみたのですが、検索にはVLOOKUPがよく使われているようですが、シートBのC列は、データの並べ替えができないので、VLOOKUPは、使えないのです。 よろしくお願いします。

  • エクセル 複数条件 VLOOKUP

    おしえて下さい。 エクセルで、下記の表のように【ブック1】のA列の条件に一致するものを 【ブック2】のシート1、シート2どちらかから検索して一致するものを 【ブック1】のB列へ抽出したいのですが、IF関数やVLOOKUPの組み合わせで 可能でしょうか? うまく説明できずにすみません。 例) 【ブック1】      A  B    1 001 あああ    2 004 えええ    3 003 ううう    4 006 かかか 【ブック2】 シート1      A  B     1 001 あああ    2 002 いいい    3 003 ううう シート2      A  B     1 004 えええ    2 005 おおお    3 006 かかか

  • Excel 複数列からの検索

    Excel 複数列からの検索 シート1のB列に入力された文字と同じものを、シート2のA~B列より検索し、一致する文字があれば、シート1A列に「○」を表示させたいと思っています。(ない場合は空欄で対応したい) <シート1>   A  B 1 ○ みかん 2    りんご 3 ○ バナナ <シート2>   A    B 1 みかん メロン 2 かき   パイナップル 3 なし  バナナ VLOOKUPを駆使してで頑張ったものの複数列が壁で無理でした。 何かいい解決法はありますでしょうか。 ちなみに。シート2のA列・B列は文字ではなく関数で得られた結果です。 参考→「=IF(ISERROR('シート名'!$B26:$B26),"",'シート名'!$B26:$B26)」 よろしくお願いいたします。

  • エクセル、特定の文字列を含むデータを全部取り出す方法

    エクセルについて質問させてください。 特定の文字列のデータを全部取り出す方法です。 A1からA50までのセルに、色々な単語(平仮名)が並んでいます。 例えば、B1のセルに「あい」と入力すると、A1からA50までの中で「あい」という順番を含んだ単語のみをC1からC50までのセルに全表示させるにはどのような関数を組めばよいのでしょうか? 完全一致はVLOOKUP関数を用いて出来たのですが、いわゆるあいまい検索はできませんでした。 まだ初心者のなもので説明もままならないですが、よろしくお願いします。

  • エクセルリンク元文字列

    エクセルのA列にURLリンクが貼られている文字列が3000行ほどあります。そのURL(例:http://www.***.**.cc/など)の文字列をB列に入力したいのですが、リンクゲット関数か何かあるのでしょうか?またはマクロ(VBA?)とかで処理する方法はあるのでしょうか。 よろしくお願いします。

  • Excel 関数 列内の文字を参照し隣列の値を返す

    Excel2003です。 関数を使ってみたのですが、思うようにいきません。 C列を参照し、「みかん」という言葉があれば、そのセルの隣の列の値(D列の「B」)を、A1に表示したいです。 最初は、VLOOKUP関数を使えばいいと思っていましたが、「検索値」というものがはっきりしない為、使用できない?のでしょうか? 「みかん」という単語を探し出すには「COUNTIF」でしょうが、その関数では、直接その値を返すのみなので、何かの関数と組み合わせるのか、それとももっと良い関数があるのでしょうか? なお、C列に「みかん」という単語は一度しか登場しない為、列内に複数「みかん」が存在している場合にの対処法は、不要です。単純に、「みかん」の値の2列目だけをA1セルに表示させたいのです。

  • エクセル2つのブック列の比較 VBAや関数について

    Aと言うブックとBと言うブックがあるとして、 Aのブックは共有ファイルではなく、Zサーバー上にあるエクセルファイルです。 Aのブックに色々な人が行の挿入、商品名の書き換え等をしていて、いつ挿入されたのかが分からないため、VBAや関数を使って調べたいのですが、 Aのブックは10シートあり、サイズ別で行も並べられているため、新しい情報を特定するのが困難です。 BのブックはAと同じシート名を作り、必要箇所だけコピーしているデータです。(オリジナルブック) やりたいことは、Aのブックから探してBのブックに追加されていない情報、一致していない情報があれば、色を付けてわかりやすくするか、Bのブックの新しいシートに結果を出すようなことがしたいのですが、可能でしょうか? AのブックはA列-IC列まであるのですが、必要な部分は全シートB列(商品コード)とE列(商品名)のみです。 Bのブックには同じシート名にして、A列に商品コード、B列に商品名としております。 AのブックのB列、E列を参照して、BのブックのA列、B列になければ、結果を表示したいです。 もし出来る方法があれば、教えてほしいです。 今はシートごとに左右比較して、見ていってるのですが、10シートの中に、行数は2000行くらいあるため、それで半日おわってしまいます。 もし分かるかた、マクロを組める方がいれば教えて頂きたいです。宜しくお願い致します。

  • エクセルでの文字列の検索(関数?)

    【シート1】    A    B 1 りんご 2 みかん 3 バナナ 【シート2】    A    B 1 バナナ  沖 縄 2 りんご  青 森 3 みかん  愛 媛 二枚のシートに、それぞれ上記のような文字列が入っていたとします。 「シート1の果物の名前の右隣に、シート2で対応している県名を検索して表示させる」という関数はあるでしょうか。 最初はVLOOKUPかと思ったのですが、どうも数式にしか使えないようなので… 申し遅れましたが、WINのエクセル2000です。 よろしくお願いします(ぺこり)

  • 文字列検索の参照文字列の指定について

    Excelでセルに任意の文字列をペーストします。そのセルは別のブックにリンクしているのでペーストする度にリンク先のセルでは文字列が更新されます。リンク先のブックにはワークシートが10あっていづれかのシートのA列にその文字列がある事になっています。更新された文字列を検索する作業を繰り返すのでマクロで組み込もうと思ったのですがFIND関数にしても、VBでCell.Find(What:=....と書くにも参照する文字列を直接指定してやらないと動きません。参照する文字列が相対的に変化するので「特定のセルの中に入力された文字列」を参照してブック内を検索したいということなのですが、実現するにはどうしたらようでしょうか?

  • エクセル関数を使ってシート1のC列にシート2の分類番号を入れたいのです

    エクセル関数を使ってシート1のC列にシート2の分類番号を入れたいのですが IF,VLOOKUP,COUNTIFなどでトライしましたがうまくいきません。 詳しい方に、ご教示願えましたら幸いです。どうぞ宜しくお願いいたします。 シート1のデータ A列に取引先番号、B列に品名およびほかの文字が混じっています。 シート2のデータ A列に取引先番号、B列に品名、C列に分類番号 尚、A列とB列は&検索条件、且つB列はあいまい検索になります。

専門家に質問してみよう