Excel如何对含有A字符或含有B字符的单元格进行计数?

比如说A列有以下5个数据:cancer,heartdisease,heartattack,heartcancer,lungcancer如果想对含有cancer或者含有he... 比如说A列有以下5个数据:
cancer, heart disease, heart attack, heart cancer, lung cancer
如果想对含有cancer或者含有heart的单元格进行计数,函数应该怎么写呢?
如果用{=SUM(COUNTIF(A:A,{"*cancer*","*heart*"})}来计数,那么heart cancer单元格就被计数了两次。
使用COUNTIFS计数则只有3个单元格被计数,也不可行。
这是个被简化的问题,实际上A列有两万多行数据,需要计数的字符有20来个。
请大家不吝赐教,感谢。
展开
 我来答
cnbubble
2019-02-02 · TA获得超过2607个赞
知道大有可为答主
回答量:1990
采纳率:83%
帮助的人:769万
展开全部

heart cancer单元格就被计数了两次,所以再减去  一次 Countif(A:A, "heart cancer")  不就行了

如果只有两种组合,可以使用数组公式:

=SUM(IF(IF(ISERR(FIND("heart",A1:A10000)),0,1)+IF(ISERR(FIND("cancer",A1:A10000)),0,1),1,0))

多一种组合,就多一个:+IF(ISERR(FIND("新的种类",A1:A10000)),0,1)

三种示例:

=SUM(IF(IF(ISERR(FIND("heart",A1:A10000)),0,1)+IF(ISERR(FIND("disease",A1:A10000)),0,1)+IF(ISERR(FIND("cancer",A1:A10000)),0,1),1,0))

下面图中例子里搜的是 cancer 或  disease的两种组合

当然,VBA是不错的选择,只有在VBA使用不便时可以考虑公式方法。

增加的条件越多,公式优势越小。

增加该行H列等于2016判断:=IF(IF(ISERR(FIND("heart",A1:A10000)),0,1)+IF(ISERR(FIND("cancer",A1:A10000)),0,1),1,0))

改为:

=SUM(IF(IF(ISERR(FIND("heart",A1:A10000)),0,1)+IF(ISERR(FIND("cancer",A1:A10000)),0,1),1,0)*(H1:H10000=2016))    

追问
非常感谢你的回答,计数结果挺好。
请问怎样添加一个“且”条件呢,比如含这些字符且H列单元格的值等于2016
19028452
2019-01-29 · TA获得超过536个赞
知道小有建树答主
回答量:1046
采纳率:59%
帮助的人:305万
展开全部

不知道是不是我理解的这样:

条件多了,不知道运行速度会怎样,每增加一个条件,就要增加一段判断“红色框”的内容。

C1=SUMPRODUCT(1*((IFERROR(FIND(B1,$A$1:$A$5)>0,0)+IFERROR(FIND(B2,$A$1:$A$5)>0,0))>0))

数组公式,三键结束。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
donleecn
2019-01-29 · TA获得超过8724个赞
知道大有可为答主
回答量:7665
采纳率:72%
帮助的人:2773万
展开全部

试一下用下面图中的办法,主要是利用iferror和find函数,图中C是一个辅助列,D1单元格就是最终结果。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
v轻扬v
2019-01-29 · TA获得超过946个赞
知道小有建树答主
回答量:682
采纳率:69%
帮助的人:161万
展开全部

=COUNTIF(统计的数据区域,"*cancer*")+COUNTIF(统计的数据区域,"*heart*")-COUNTIF(统计的数据区域,"*cancer*heart*")-COUNTIF(统计的数据区域,"*heart*cancer*")

以下为使用VBA编写的自定义函数:

自定义函数的使用方式为

=单元格统计(A:A, "heart,cancer")

Public Function 单元格统计(Rng As Range, Str As String) As Long '第一个参数为统计区域,第二个参数值为任意个以逗号隔开的字符串
Dim N As Long, R As Range
aa = Split(Str, ",")
For Each R In Rng
    For i = LBound(aa) To UBound(aa)
        If InStr(1, R.Value, aa(i), vbTextCompare) > 0 Then
            N = N + 1
            Exit For
        End If
    Next
Next
单元格统计 = N
End Function
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柳上寒烟
2019-01-29 · TA获得超过2149个赞
知道大有可为答主
回答量:2847
采纳率:79%
帮助的人:524万
展开全部
我或许会这样处理:
将要查找的字符(不论A,B,或C,D)替换成空,只要长度减小则计数。
这样无论如何不会重复计数(符合一个条件与符合多条件是一样的被计一次)?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式