重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

文字列AかBを含むセル数をSUMPRODUCT関数で求める場合
エクセル2000です。
A1:A10のセル範囲だとして
=SUMPRODUCT(ISNUMBER(FIND({"A","B"},A1:A10))*1)
とすると、同一セルにA、Bの両方があった場合、重複してカウントされてしまいます。
重複を除外するために、
=SUMPRODUCT(ISNUMBER(FIND({"A","B"},A1:A10))*1)-SUMPRODUCT(ISNUMBER(FIND("A",A1:A10))*ISNUMBER(FIND("B",A1:A10)))
と、重複してカウントされた数から両方が存在するセルの数を減じて求めましたが、以下のようなより簡素な式でも求められことがわかりました。

=SUMPRODUCT((ISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))>=1)*1)

この式でなぜAB両方があるセルが重複カウントされないのかどうもわかりません。
ご教示いただければ幸いです。

なお、SUMPRODUCTではなく
=SUM(COUNTIF(A1:A10,{"*A*","*B*"}))-SUM(COUNTIF(A1:A10,{"*A*B*","*B*A*"}))
でもできることは存じておりますが、今回はSUMPRODUCTの疑問として質問いたしました。

A 回答 (3件)

以下だと重複カウントされます。



=SUMPRODUCT((ISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))))

理由は、Aがあるとき「ISNUMBER(FIND("A",A1:A10))」はTRUE、Bがあるとき「ISNUMBER(FIND("B",A1:A10))」はTRUE、なので、TRUE+TRUE=2となります。(=TRUE+TRUEという式をセルにいれれば2になるはずです)


本題の以下ですが、
=SUMPRODUCT((ISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))>=1)*1)

TRUE+TRUE=2、TRUE+FALSE=1、FALSE+TRUE=1、いずれも1以上なので、「(ISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))>=1)*1」の結果は2でも1でも1とカウントします。

なので、結果は重複なしになります。
    • good
    • 0
この回答へのお礼

なあ~るほどぉ!
非常にわかりやすい解説をありがとうございました。
ISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))>=1)がTRUEを返すから、それに*1してるってことですね。
納得しました。
kyboさま、ありがとうございます。(o。_。)oペコッ.

お礼日時:2010/08/27 10:43

>AB両方があるセルが重複カウントされないのかどうもわかりません。


⇒sumproduct式の「+」は論理和ですから、両文字がある場合、1+1⇒1となるので重複計数されません。
    • good
    • 0
この回答へのお礼

mu2011さま、ありがとうございます。
そのとおりでした。
不勉強を痛感しました。

お礼日時:2010/08/27 10:46

SUMPRODUCT関数では答えがTRUEであれば1、FALSEであれば0と数えられますね。

AとBが同時に含むセルではISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))の値は2になりますが式ではその足し合わせた値が1以上の場合にはということで、2の場合であってもその答えは1以上、すなわちTRUEとなって1が返されますね。
    • good
    • 0
この回答へのお礼

KURUMITOさま、ありがとうございます。
言われてみればそのとおりですね。
不勉強でした。
反省(T.T)

お礼日時:2010/08/27 10:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!