エクセル2000で文字列AかBを含むセル数を求める方法

このQ&Aのポイント
  • エクセル2000で、文字列AかBを含むセル数を求める方法について説明します。
  • SUMPRODUCT関数を使用して、A1:A10のセル範囲内で文字列AかBが含まれるセルの数を求めることができます。
  • 重複を除外するためには、以下のような簡素な式を使用することができます:=SUMPRODUCT((ISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))>=1)*1)
回答を見る
  • ベストアンサー

文字列AかBを含むセル数をSUMPRODUCT関数で求める場合

文字列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の疑問として質問いたしました。

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

以下だと重複カウントされます。 =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とカウントします。 なので、結果は重複なしになります。

merlionXX
質問者

お礼

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

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

>AB両方があるセルが重複カウントされないのかどうもわかりません。 ⇒sumproduct式の「+」は論理和ですから、両文字がある場合、1+1⇒1となるので重複計数されません。

merlionXX
質問者

お礼

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

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

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

merlionXX
質問者

お礼

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

関連するQ&A

  • セル内の文章から文字を抜出したいです

    セル内の文章から文字を抜出したいです。 文字の書き方は、本当にランダムな並び方をしています。 [例] A1セル あいうえお12345 ↓ B1セル ○○ A2セル かきくけこ456789 ↓ B2セル ■■ いま、下の関数式を入れていますが、5つしか文字を抜き出せません。 せめて倍の10個は抜出したいのですが、どうすればいいでしょうか? =IF(ISNUMBER(FIND("あいうえお",A2)),"OO",IF(ISNUMBER(FIND("さしすせそ",A2)),"■■",IF(ISNUMBER(FIND("かきくけこ",A2)),"□□",IF(ISNUMBER(FIND("たちつてと",A2)),"◇◇",IF(ISNUMBER(FIND("なにぬねの",A2)),"△△","その他"))))) よろしくお願いいたします。

  • 負数のみを対象としたSUMPRODUCT関数

    エクセル2000です。 たとえば A1:A40 がCCCでないもののうちの B1:B40 の中での最大値をSUMPRODUCT関数で求める方法は以下の式だと思います。 =SUMPRODUCT(MAX((A1:A40<>"CCC")*(B1:B40))) ところが、B1:B40 の数値がすべて負の数だった場合、返って来る答えは常に 0 になるようです。 最初は原因がわからず、途方にくれていましたが、A1:A4の中で値がCCCのセル場合、そのセルが返す値は FALSE で、これを対応するB列に乗じた積を 0 としているのではないかと推測しました。 そこで、次の式のように FALSEの数+1番目に大きい数を指定したところ、やっと負の数のなかから最大値を返すようになったように思います。 =SUMPRODUCT(LARGE((A1:A40<>"CCC")*(B1:B40),COUNTIF(A1:A40,"CCC")+1)) この推測は合っているのでしょうか? 他にもっと簡単なやりかたがあるのでしょうか?

  • SUMPRODUCT関数で0(ゼロ)と

    はじめまして。arumikan091と申します。 (Excel初心者です(^^;) ExcelのSUMPRODUCT関数について質問があります。 A B (1) 2 0 (2) 2 4 (3) 2 (空白) (4) 2 3 (5) 2 0 (6) 3 4 (7) 3 (空白) というシートの中で、 "A列が2で、かつB列が0の個数を数える" ということをしようと思い =SUMPRODUCT((A1:A7=2)*(B1:B7=0)) と入力したのですが、 これだとB列の0(ゼロ)と一緒に""(空白)も 数えられてしまうようです。 (上記シートだと式の期待値は2なのですが、 実際値は3が返ってきます) このような場合、0(ゼロ)だけを数えられる ようにするにはどのようにすればいいか 教えていただけたら幸いです。 一応、自分でも少ない知識の中で色々トライしてみて、 =SUMPRODUCT((A1:A7=2)*(B1:B7=0))-SUMPRODUCT((A1:A7=2)*(B1:B7="")) のように式を入力するとちゃんと0(ゼロ)だけを 数えてくれるようなのですが、さらに簡単な 方法がありましたら教えてください。 Windows ME、Excel2000です。 ※1 B列単独で =COUNTIF(B1:B7,0)とするとちゃんと 0(ゼロ)だけを数えてくれます。 ※2 一応既存のQ/A集で同じ質問がないか探しましたが、 (「SUMPRODUCT 空白セル」のANDで) 同様、類似の質問が既にありましたら 申し訳ありません。 長文失礼しました(m_ _m

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

    エクセルのワークシート関数で質問です。 「A1セルに、文字列、A、B、Cの何れかを含み、かつCDを含まない」ことを調べる関数です。 素直に、 =AND(ISNUMBER(FIND("A",A1)),ISNUMBER(FIND("B",A1)),ISNUMBER(FIND("C",A1)),NOT(ISNUMBER(FIND("CD",A1)))) と長ったらしく書けば取得できることはわかるのですが、もっと簡潔なやり方がありそうな気がします。 どうか教えてください。

  • SUMPRODUCT関数とCOUNTIF関数

    A-001 A-001 A-002 A-003 B-001 B-002 A-001 C-001 C-002 とあったときに仮に9個の製品コードであるとして、 A-001は3回でてきていますので種類としては7種類の 製品コードということになります。 "質問:様々ある素材のうち重複しているものは1つだけカウントして上記の7というような値を求める関数がありますか?" 以前このような質問をし、 ”=SUMPRODUCT(1/COUNTIF($A$1:$A$9,A1:A9))” との回答をいただきました。回答通りにやると値が求められました。とても大助かりでした。 そこで、関数のヘルプで どういう関数かを勉強しましたが僕には理解できませんでした。配列とかなんとかやらでてきて……超ムズイ!! だれかこんな僕にとても分かりやすいことばで SUMPRODUCT関数とCOUNTIF関数を教えていただけませんか?EXCELのヘルプは難しすぎる…… 宜しくお願いします。

  • EXCEL:あるセルの内容により文字列をカウントする

    EXCELでセルB1からB4 に 1EFG 2AAAG 3EFGHC 4TFGFG と入っているとします。またA1にはFGと今入っているとします。 B5に FGを含んでいるセルがいくつあるかをカウントした数を表示するため はB5に式=COUNTIF(B1:B4、”*FG*”)と書けば3とカウントできますがA1セルに入っている文字列を含むセルがB1からB5にいくつあるかというのは、どう書けばいいのでしょうか。 A1はいろいろ変えたいが、B5の式は変えずに処理できるかという質問です。 回答をよろしくお願いし

  • SUMPRODUCT関数の使い方

    A列 aaa aaa bbb bbb ccc ccc と入力して、 「aaa」の個数と「bbb」の個数の合計を求める式を教えてください。 見た限りの答えは、「aaa」が2個、「bbb」が2個で4なのですが B1に 「=SUMPRODUCT(A:A="aaa",A:A="bbb")」 としたのですが、「0」が返ってきてしまいます。 B2に 「=SUMPRODUCT(COUNTIF(A:A,"aaa"),COUNTIF(A:A,"bbb"))」 だと、 4が返ってきますが A列を aaa aaa bbb にすると「3」が返ってきてほしいのに、2になってしまいます。 個数の合計を返す関数式をご教授ください。

  • 関数の使い方SUMPRODUCT?DCOUNT?

    エクセルの関数の使い方についてアドバイスをお願いいたします あるシート(仮にSheetAとする)において B列にあるデータの任意の文字(仮にCとする。文字位置は固定ではない)であって、且つ D列にあるデータの任意の文字(仮にEとする。文字位置は固定ではない)の双方を満たすセルの数を数えて、さらにその結果は同じファイルの中にある別のシート(仮にSheetFとする)に表したいと思います これについては関数SUMPRODUCTと関数FINDを使って導きたいと考えておりました。 =SUMPRODUCT(ISNUMBER(FIND("C",B1:B100))*ISNUMBER(FIND("E",D1:D100))) として同じシート上に結果を表すことはできたのですが、別シートに表すところで、 つまづいてしまいました(おそらく初歩的なミスと思うのですが・・・。) 別のシート名を表す部分をどこに入力したらいいのかアドバイスいただきたく お願いいたします それとも別の関数(DCOUNTなど)を使用したほうがよりベストなのか迷っています DCOUNTの使い方も精通しておらず苦慮しております 調べてみましたが前例を見つけだす事ができませんでした 簡単なことでしたらすみません エクセル2003です どうぞアドバイスのほど よろしくお願いいたします

  • エクセル SUMPRODUCT関数について教えてください

    エクセルで作成した表から ○○かつ●●のデータ個数を求めたく、 SUMPRODUCT関数を こちらで調べておりましたが どうしても解決しない部分があります。 どうぞ よろしくお願いいたします。 下記8桁数字は、日付です。 カウントしたい数は、B列(終了)が、A1セルに入力された年月かつ、区分(C列)が「A」の数です。 =SUMPRODUCT((LEFT(B2:B100,6)=A1)*(C2:C100="A")) こちらで、『B列=A1セル かつ C列="A"』のみのカウントは出来たのですが、 終了延長(D列)が空欄でない場合は、D列日付データの方をカウントする。 早期終了(E列)が空欄でない場合は、D列・B列よりも E列を優先し、カウントする。という条件を付けたいのですが、 Sheet1 A1セルに「200810(数を調べたい年月を入力)」 (開始)  (終了)     (区分)  (終了延長)  (早期終了)  A列     B列      C列     D列      E列 20061001   20081001   A    -        - 20070926   20081020   A    -        - 20071102   20081009   A    20081201    - 20080101   20081013   B    -        - 20080208   20081010   A    -        20080210 ・・・ この場合、「2」となるようにです。 IF、OR関数あたりかな と考えておりますが、SUMPRODUCT関数のどの部分で条件付ければ良いか解りません。 説明下手で大変申し訳ございませんが、ご助力いただければ幸いです。 

  • ExcelのSUMPRODUCTで文字の入ったセルをカウントする方法

    Excelの関数SUMPRODUCTを使って、以下のような式で文字の入ったセルを カウントしようとしましたが出来ませんでした。 【式】 =SUMPRODUCT((A!E3:E5000="")*(((A!B3:B5000*1>=U52*1)*(A!B3:B5000*1<=V52*1)))) 【式解説】 =SUMPRODUCT((A!E3:E5000="") ←シート「A」の「E3」から「E5000」の範囲で文字が入っているものをカウント。 *(((A!B3:B5000*1>=U52*1) ←「U52」は当週の開始日。(7月1日) シート「A」の「B3」から「B5000」の範囲でこの日付より大きい日を条件にする。 *(A!B3:B5000*1<=V52*1)))) ←「U52」は当週の終了日。(7月7日) シート「A」の「B3」から「B5000」の範囲でこの日付より小さい日を条件にする。 【やりたい事】 ・シートAのE3からE5000の範囲の列で、文字が入ってるセルをカウントしたい。 ・日付の範囲を7月1日~7月7日(週)に指定したい。 この関数でどこを直せばいいでしょうか? 又、他にこうすればいい等アドバイスがありましたら 宜しくお願い致します。

専門家に質問してみよう