[[20040917170026]] 『複数条件のカウントする際の含む条件』(謝々) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数条件のカウントする際の含む条件』(謝々)

 初めて質問します。いつもこちらで目うろこの情報をGETさせていただき、
 感動さえ覚えております。
 さて、複数条件でカウントをする場合、
 SUMPRODUCTや配列数式=SUM(IF・・・)を使用するかと思いますが、
 その際に「任意の文字を含む」という条件はたてられないのでしょうか?
 DCOUNTを使用するとできるのですが、条件(Criteria)の欄を設定しなければならず、
 大量の数式をたてる時にはうっとおしいのです。
 SUMPRODUCTや配列数式=SUM(IF・・・)を使って試してみたのですが、文字データに
 ついてはその文字そのものと合致する条件しか結果が正しく反映されないようです。
 できないならできないで諦めてDCOUNTでコツコツと条件をたてます。

 どなたか教えてください。


『今の書き込み』
改行したのですがうまくいかず、読みにくくてごめんなさい。
(謝々)


 具体的なデータ例と、その結果がわからないと、
解答しにくいです。
(KAMIYA)


 勝手にこういうことではないかと想像して書きますが・・・、
	A	B
1	aaa1	2  {=SUM(IF((SUBSTITUTE(B1:B6,"ab","")<>(B1:B6)),1))}
2	aba1	
3	abc1	
4	aaf1	
5	ffa1	
6	ffa1	
"ab"という文字を含むセルをカウント。
置換した後の文字列と元の文字列が違った場合にカウントします。
(KAMIYA)


 =COUNTIF(A1:A6,"*ab*")
 で良いのかも。
 *で任意の文字が取れますので、上記の「*ab*」で「abを含む」ということと同じになります。(Σ)


一度例を送ったのですが、反映されていなかったようで失礼いたしました。
	A	B
1	X1	20
2	X2	18
3	Z10	12
4	X1	10
5	Z2	18
6	X10	20

この中で、「A列がXを含み、かつB列が20のもの」をDCOUNT以外で求められないか?
ということです。
この場合、結果は2になります。

SUBSTITUTEや=SUM(IF・・・)を使用すると、COUNTIFのときのような"*X*"という「含む
条件」がどうも使用できないようです。


 書き込みは消さないでください。
https://www.excel.studio-kazu.jp/wiki/excelboard/#kizon
こちらを読んでください。
(事務局代行)


申し訳ありません。気づいて送り直したらボロボロになりました。
素人で粗こつもので失礼いたしました。
(謝々)

 師匠のパクリですぅ
=SUMPRODUCT(ISNUMBER(FIND("X",A1:A6))*(B1:B6=20))
こう?v(=∩_∩=)v
(SoulMan)

 (SUBSTITUTE(A1:A6,"X","")<>(A1:A6))
この部分で「A1:A6と、"X"を""に置換した後のA1:A6」を
比較するので、ワイルドカード(*)は必要ないですよ。
先にあげた数式を延用するなら、
 
=SUM(IF((SUBSTITUTE(A1:A6,"X","")<>(A1:A6))*(B1:B6=20),1))
 
として、Shift+Ctrl+Enter
でも、SoulManさんのISNUMBERとFINDの組み合わせが
Nice Idea!!!。すっきりしてますしね。
(KAMIYA)

 w(☆o◎)wおおおぉ〜〜〜
パクリとはいえKAMIYAさんから、三本いただきましたぁv(=∩_∩=)v
でも、このFindとISNUMBERの組み合わせは、色々と応用出来そうですね。
これからも、つかわさせていただきます。
(SoulMan)


 KAMIYAさん、SoulManさん、ありがとうございます。
 ところが申し訳ないのですが、どうもうまくいきません。
 ISNUMBERとFINDのほうは、例題で試してみても答えが0になってしまい…。
 (ちなみにアルファベットが入ってもISNUMERなんですか???)
 =SUM(IF…の配列数式のほうは、含む側(Xを含む)のカウントしかして
 もらえません。
 うまくいかない原因で思い当たるフシはありますでしょうか?
 実際のデータはこんな感じです。これが1000件以上あります。
 B列は年度ですが、シリアル値ではなく単なる数字データで入っています。
 例題として「A列でAを含みB列が2000」のものということでどうでしょう?

	A 		B
1 	A1		2000
2 	I3,I5		2000
3 	A2, C5 		1999
4 	B1		1999
5 	B2		2002
6 	A2, BX		2001
7 	E6, B2		2002
8 	C2, H1		2002
9 	A2, D1		2000
10 	D2, A1		2000

 =SUMPRODUCT(ISNUMBER(FIND("A",A1:A10))*(B1:B10=2000))
答えは「3」ですか?
(SoulMan)

 A     B    C    D     E    F    G                 
A1	2000	3	1	1	1	1
I3,I5	2000		0	#VALUE!	1	0
A2, C5 	1999		1	1	0	0
B1	1999		0	#VALUE!	0	0
B2	2002		0	#VALUE!	0	0
A2, BX	2001		1	1	0	0
E6, B2	2002		0	#VALUE!	0	0
C2, H1	2002		0	#VALUE!	0	0
A2, D1	2000		1	1	1	1
D2, A1	2000		1	5	1	1
C1に
=SUMPRODUCT(ISNUMBER(FIND("A",A1:A10))*(B1:B10=2000))
D1に
=ISNUMBER(E1)*1
E1に
=FIND("A",$A$1:$A$10)
F1に
=($B$1:$B$10=2000)*1
G1に
=D1*F1
結果G列の合計が今回の求めるべき答えとなります。
 >(ちなみにアルファベットが入ってもISNUMERなんですか???)
ISNUMERで#VALUE!を消してるんですね。v(=∩_∩=)v
(SoulMan)

 >(ちなみにアルファベットが入ってもISNUMERなんですか???)
ISNUMBER関数の引数としてFIND()関数が指定してあるでしょう?
「FIND関数の計算結果が数字であるかどうか」を判断しています。
セルが数字かどうかを判断しているわけではないんですよ。
FIND関数は「検索する文字が対象の何番目にあるか」を調べる関数です。
 
 >ISNUMERで#VALUE!を消してるんですね。
この場合、*1のないほうがSUMPRODUCTの計算過程を理解していただけるでしょう。
FIND("A",A1:A10)で、"A"が見つかれば、数値が返ります。
見つからなければ#VALUE!が返ります。
 
ISNUMBER(FIND("A",A1:A10))で、
"A"が見つかれば、数値が返っているのでTRUEが返ります。
見つからなければ#VALUE!数値でないものが返っているのでFALSEが返ります。
 
($B$1:$B$10=2000)も同様に、2000ならTRUE、それ以外ならFALSEになります。
  
TRUE*TRUE=1
TRUE*FALSE=0
FALSE*TRUE=0
FALSE*FALSE=0
のように両方ともTRUEである行に1が返されて
その合計がSUMPRODUCTの答えになります。
 
 >うまくいかない原因で思い当たるフシはありますでしょうか?
="2000"
'2000
のように文字列として入力されている場合は
うまくカウントしませんが、このようなことはありませんか?
(KAMIYA)

 解決策書くのの忘れた。
もし文字列のときは、対象データを数値にできればいいのですが、
そうもいかないときはカウント側で
=SUMPRODUCT(ISNUMBER(FIND("A",A1:A10))*(B1:B10*1=2000))
 
てな具合に。
(KAMIYA)


 KAMIYAさん、SoldOutさん、ありがとうございました。ばっちしです!
 いつもDCOUNTAでCriteria用の大量のデータでドット画のようになって
 いたシートから遂に解放されます!
 うまくいかなかったのは、やはり年度が文字列になっていたようです。
 会社では数値だったのですが、家で再現するときになってしまって
 いたようです。
 ISNUMBERについても理解できました。
 そうか。返り値が数字なんですね。
 入れ子はよく使うので、これは今後他のことにも応用できそうです。

 いつも、過去ログで参考にさせていただいていたのですが、みなさん
 徹底した解決までのレスをすごいなぁと思っておりました。
 今回体感できて尚、感動いたしました!
 ありがとうございました。
 また質問させていただくことがあるかもしれませんが、そのときはまた
 よろしくお願いいたします。m(_ _)m

 (謝々)

 SoldOut
って、、売り切れ??
v(=∩_∩=)v
(SoulMan)


 SoulManさん、大変失礼いたしました!
 頭の中で「ソウル」ばかり先行していたようです。
 > って、、売り切れ??
 またよりによって…。いやいや本当に失礼いたしました。
 恩を仇で返してしまった…。
(謝々)

 だから横文字じゃなくて日本語にしたらって言ったのに・・・
 ※漢字でも鯉太郎になったことあるけど・・
 ♪〜〜( ̄ε ̄ ;)
 |)彡サッ!
 (川野鮎太郎)

 全然気にしてない( ・_;)( ;_;)( ;_;)(>0<)わぁ〜〜〜ん
v(=∩_∩=)v
(SoulMan)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.