• ベストアンサー

エクセルでの「文字を含む」複数条件の個数算出方法

とても困ってます。 例 A1セルに「11」が入っています。   B  C 1 ああ  11 2 いい  12 3 Pあ  11 4 いP  11 ・ ・ ・ で、B列にPを含み、C列が「11」の値を ={SUM(iF($B$2:$B$1000="*P*",IF($C$2:$C$1000=A$1,1,0),0))} 求めようとしたのですが、 どうもうまく個数が求められません。 なぜでしょうか? (例が悪くて、申し訳ありません) とても困っています。 回答宜しくお願い致します。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

No.3です。 >={SUM(IF($B$2:$B$1000="*P*",IF($C$2:$C$1000=A$1,1,0),0))} >では、求められないのですか? 「*」や「?」などのワイルドカードは、 「セル参照(セル範囲参照) 比較演算子 条件」 の形では、条件の中に組み込めません。 ちなみに、ここでいう"比較演算子"というのは、 「=」「>」「<」「>=」「<=」「<>」などのことです。 ワイルドカードが利用出来るのは、 条件としては、SUMIF、COUNTIF 検索値としては、SEARCH、MATCH など、いくつかの関数に限られます。 FIND自体はワイルドカードは使用出来ませんが、No.2の方の回答は、 「Pがどこかにある」 という条件なので、ワイルドカードなしで、同等の検索が出来るわけです。 質問欄のようなあいまい検索は、SEARCHやFINDを通すしかありません。

katakko
質問者

お礼

早速の回答、ありがとうございました。 また、私のわかりにくい質問に 丁寧にわかりやすく答えていただき、感謝感謝です(涙)。 >「Pがどこかにある」という条件なので、 >ワイルドカードなしで、同等の検索が出来るわけです。 なるほど~。 ワイルドカードの利用制限をしっかり理解していませんでした。 また、「あいまい検索は、SEARCHやFINDを通す!」ですね。 ありがとうございました。

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#1です。 #3の人も答えているように、「*」「?」などをワイルドカードとして使うのは一部の関数でしか使えません。 文字列=”*P*”と言う時に、 *P*という文字列を同一内容であるか検査したいのか、 *をワイルドカードとしてマッチングしたいのか、 この式では、コンピュータにはその意図はわかりません。 VBAでは、 文字列 Like "*P*" という形で、マッチングをさせることができます。 >皆さんでしたら…使いますか? 私なら、DCOUNTを使います。 複数の条件について難しく考えなくても、 単に、並べるだけですみますし、可読性(他の人だってやってることが簡単にわかる)が増します。

katakko
質問者

お礼

新たに回答していただき、ありがとうございます。 >*P*という文字列を同一内容であるか検査したいのか、 >*をワイルドカードとしてマッチングしたいのか、 >この式では、コンピュータにはその意図はわかりません。 全てをコンピュータに任せられないのですね。。。 VBAは、察しておられるとは思いますが、 使えません。 が、名前は聞いたことがあります(笑) いつか使える日がきますように~。 >私なら、DCOUNTを使います。 いまいち、DCOUNT関数がわからないのですよね。頭がこんがらがってしまって・・・・。 今回は急いでいたのもあって、理解できたSUMPRODUCT関数を使いました。 >複数の条件について難しく考えなくても、 >単に、並べるだけですみますし、可読性(他の人だってやってることが簡単にわかる)が増します。 頭がこんがらがりながら、配列関数をつかったのですが 難しく考えすぎたようです。 BLUEPIXYさんがおっしゃるとおり、 みんなが数式を見て簡単に理解できるのがベストと思います。 改めて、数式を作り直したいと思います。 とても、参考になりました。ありがとうございました。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 補足程度ですが。 NOT+ISERROR、NOT+ISERRは、ISNUMBER1つに出来ます。 No.2の方の数式なら、 =SUMPRODUCT(ISNUMBER(FIND("P",$B$2:$B$1000))*($C$2:$C$1000=11)) という風になります。

katakko
質問者

お礼

早速の回答ありがとうございます。 とても助かりました。 回答してくださった皆さんにお聞きしたいことがあります。 お時間のあるときにわかる範囲で教えていただけますか? シートAに    A    B 1 りんご    0点 2 りんご    2点 3 みかん    3点 4 みかん    1点 5 りんご    2点 シートB(A列は点数 B1セルに「りんご」)に    A    B     1   答え     2   答え     3   答え     4   答え が入っていて、 シートBのB列で点数ごとの「りんご」の個数(例:2点のりんごはいくつあるか)を      ={SUM(IF(シートA!$A$1:$A$1000=$B$1,IF(シートA!$B$1:$B$1000=A2,1,0),0)))}-(1)と 求めました。 この場合は、求められるのに なぜ、 ={SUM(IF($B$2:$B$1000="*P*",IF($C$2:$C$1000=A$1,1,0),0))} では、求められないのですか? また、 皆さんでしたら、(1)の式は使わず、 教えていただいた式を使いますか?(皆さんの式のほうがスマートなような気がします) 文面が同じになってしまったこと、お許しください。 宜しくお願い致します。ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

こんな方法もあります。 =SUMPRODUCT(NOT(ISERROR(FIND("P",$B$2:$B$1000)))*($C$2:$C$1000=11)) Pが半角,全角両方ある場合はJIS関数又はASC関数を併用してください。 =SUMPRODUCT(NOT(ISERROR(FIND("P",ASC($B$2:$B$1000))))*($C$2:$C$1000=11)) 又は =SUMPRODUCT(NOT(ISERROR(FIND("P",JIS($B$2:$B$1000))))*($C$2:$C$1000=11))

katakko
質問者

お礼

早速の回答ありがとうございます。 とても助かりました。 回答してくださった皆さんにお聞きしたいことがあります。 お時間のあるときにわかる範囲で教えていただけますか? シートAに    A    B 1 りんご    0点 2 りんご    2点 3 みかん    3点 4 みかん    1点 5 りんご    2点 シートB(A列は点数 B1セルに「りんご」)に    A    B     1   答え     2   答え     3   答え     4   答え が入っていて、 シートBのB列で点数ごとの「りんご」の個数(例:2点のりんごはいくつあるか)を      ={SUM(IF(シートA!$A$1:$A$1000=$B$1,IF(シートA!$B$1:$B$1000=A2,1,0),0)))}-(1)と 求めました。 この場合は、求められるのに なぜ、 ={SUM(IF($B$2:$B$1000="*P*",IF($C$2:$C$1000=A$1,1,0),0))} では、求められないのですか? また、 皆さんでしたら、(1)の式は使わず、 教えていただいた式を使いますか?(皆さんの式のほうがスマートなような気がします) 文面が同じになってしまったこと、お許しください。 宜しくお願い致します。ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

={SUM(NOT(ISERR(SEARCH("*P*",B2:B1000)))*(C2:C1000=$A$1))} でできます DCOUNTを使う方法もあります。

katakko
質問者

お礼

早速の回答ありがとうございます。 とても助かりました。 回答してくださった皆さんにお聞きしたいことがあります。 お時間のあるときにわかる範囲で教えていただけますか? シートAに    A    B 1 りんご    0点 2 りんご    2点 3 みかん    3点 4 みかん    1点 5 りんご    2点 シートB(A列は点数 B1セルに「りんご」)に    A    B     1   答え     2   答え     3   答え     4   答え が入っていて、 シートBのB列で点数ごとの「りんご」の個数(例:2点のりんごはいくつあるか)を      ={SUM(IF(シートA!$A$1:$A$1000=$B$1,IF(シートA!$B$1:$B$1000=A2,1,0),0)))}-(1)と 求めました。 この場合は、求められるのに なぜ、 ={SUM(IF($B$2:$B$1000="*P*",IF($C$2:$C$1000=A$1,1,0),0))} では、求められないのですか? また、 皆さんでしたら、(1)の式は使わず、 教えていただいた式を使いますか?(皆さんの式のほうがスマートなような気がします) 文面が同じになってしまったこと、お許しください。 宜しくお願い致します。ありがとうございました。