- ベストアンサー
エクセルでの「文字を含む」複数条件の個数算出方法
とても困ってます。 例 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))} 求めようとしたのですが、 どうもうまく個数が求められません。 なぜでしょうか? (例が悪くて、申し訳ありません) とても困っています。 回答宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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を通すしかありません。
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1です。 #3の人も答えているように、「*」「?」などをワイルドカードとして使うのは一部の関数でしか使えません。 文字列=”*P*”と言う時に、 *P*という文字列を同一内容であるか検査したいのか、 *をワイルドカードとしてマッチングしたいのか、 この式では、コンピュータにはその意図はわかりません。 VBAでは、 文字列 Like "*P*" という形で、マッチングをさせることができます。 >皆さんでしたら…使いますか? 私なら、DCOUNTを使います。 複数の条件について難しく考えなくても、 単に、並べるだけですみますし、可読性(他の人だってやってることが簡単にわかる)が増します。
お礼
新たに回答していただき、ありがとうございます。 >*P*という文字列を同一内容であるか検査したいのか、 >*をワイルドカードとしてマッチングしたいのか、 >この式では、コンピュータにはその意図はわかりません。 全てをコンピュータに任せられないのですね。。。 VBAは、察しておられるとは思いますが、 使えません。 が、名前は聞いたことがあります(笑) いつか使える日がきますように~。 >私なら、DCOUNTを使います。 いまいち、DCOUNT関数がわからないのですよね。頭がこんがらがってしまって・・・・。 今回は急いでいたのもあって、理解できたSUMPRODUCT関数を使いました。 >複数の条件について難しく考えなくても、 >単に、並べるだけですみますし、可読性(他の人だってやってることが簡単にわかる)が増します。 頭がこんがらがりながら、配列関数をつかったのですが 難しく考えすぎたようです。 BLUEPIXYさんがおっしゃるとおり、 みんなが数式を見て簡単に理解できるのがベストと思います。 改めて、数式を作り直したいと思います。 とても、参考になりました。ありがとうございました。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 補足程度ですが。 NOT+ISERROR、NOT+ISERRは、ISNUMBER1つに出来ます。 No.2の方の数式なら、 =SUMPRODUCT(ISNUMBER(FIND("P",$B$2:$B$1000))*($C$2:$C$1000=11)) という風になります。
お礼
早速の回答ありがとうございます。 とても助かりました。 回答してくださった皆さんにお聞きしたいことがあります。 お時間のあるときにわかる範囲で教えていただけますか? シート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)
こんな方法もあります。 =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))
お礼
早速の回答ありがとうございます。 とても助かりました。 回答してくださった皆さんにお聞きしたいことがあります。 お時間のあるときにわかる範囲で教えていただけますか? シート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)
={SUM(NOT(ISERR(SEARCH("*P*",B2:B1000)))*(C2:C1000=$A$1))} でできます DCOUNTを使う方法もあります。
お礼
早速の回答ありがとうございます。 とても助かりました。 回答してくださった皆さんにお聞きしたいことがあります。 お時間のあるときにわかる範囲で教えていただけますか? シート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)の式は使わず、 教えていただいた式を使いますか?(皆さんの式のほうがスマートなような気がします) 文面が同じになってしまったこと、お許しください。 宜しくお願い致します。ありがとうございました。
お礼
早速の回答、ありがとうございました。 また、私のわかりにくい質問に 丁寧にわかりやすく答えていただき、感謝感謝です(涙)。 >「Pがどこかにある」という条件なので、 >ワイルドカードなしで、同等の検索が出来るわけです。 なるほど~。 ワイルドカードの利用制限をしっかり理解していませんでした。 また、「あいまい検索は、SEARCHやFINDを通す!」ですね。 ありがとうございました。