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))
不知道是不是我理解的这样:
条件多了,不知道运行速度会怎样,每增加一个条件,就要增加一段判断“红色框”的内容。
C1=SUMPRODUCT(1*((IFERROR(FIND(B1,$A$1:$A$5)>0,0)+IFERROR(FIND(B2,$A$1:$A$5)>0,0))>0))
数组公式,三键结束。
试一下用下面图中的办法,主要是利用iferror和find函数,图中C是一个辅助列,D1单元格就是最终结果。
=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
我或许会这样处理:
将要查找的字符(不论A,B,或C,D)替换成空,只要长度减小则计数。
这样无论如何不会重复计数(符合一个条件与符合多条件是一样的被计一次)?