Excel 带通配符的区分大小写的 COUNTIF:本机函数?
Excel case-sensitive COUNTIF with wildcards: native function?
我正在尝试找到一个本机 Excel 函数(或它们的组合),它的行为将完全按照 COUNTIF 的方式(即处理通配符),但区分大小写。
我已经成功地使用了 SUMPRODUCT/EXACT 函数,它们确实执行区分大小写的计数:但是问题是我无法让这些函数识别通配符。
也许最好举例说明我实际需要什么。我想取一个范围,并搜索文本 "TBA" 的出现次数,其中字母必须大写,但它们可以出现在单元格中的任何位置。例如:
待定 - 应该算在内
tbA - 不应该算
某事待定某事 - 应该算在内
somethingtBasomething - 不应该算在内
=COUNTIF(A1:A10,"*TBA*")
' Correctly accounts for wildcards (*), but isn't case-sensitive
=SUMPRODUCT(--EXACT(A1:A10,"TBA"))
' Is case-sensitive, but only finds whole cell values which match
=SUMPRODUCT(--EXACT(A1:A10,"*TBA*"))
' Doesn't recognise * as a wildcard, because it's
' literally only searching for cells with asterisks
' either side of the letters
为了解决我的问题,我编写了一个用户定义的函数,如下所示:
Option Compare Binary
' Case-sensitive COUNTIF
Function CS_Countif(rng As Range, str As String) As Long
Dim Matches As Long, cl As Range
For Each cl In rng
If InStr(cl.Value, str) > 0 Then Matches = Matches + 1
Next cl
CS_Countif = Matches
End Function
但是,此函数会减慢电子表格的计算速度,每次更新相关范围内的一个单元格时都会有明显的延迟。
任何人都可以想出本机 Excel 函数的组合(与 SUMPRODUCT/EXACT 的方式相同)来满足我的需求吗?谢谢
由于 FIND 区分大小写,您可以使用:
=COUNT(INDEX(FIND("TBA",A1:A7),))
只有 INDEX 函数,所以您不必数组输入公式。
我正在尝试找到一个本机 Excel 函数(或它们的组合),它的行为将完全按照 COUNTIF 的方式(即处理通配符),但区分大小写。
我已经成功地使用了 SUMPRODUCT/EXACT 函数,它们确实执行区分大小写的计数:但是问题是我无法让这些函数识别通配符。
也许最好举例说明我实际需要什么。我想取一个范围,并搜索文本 "TBA" 的出现次数,其中字母必须大写,但它们可以出现在单元格中的任何位置。例如:
待定 - 应该算在内
tbA - 不应该算
某事待定某事 - 应该算在内
somethingtBasomething - 不应该算在内
=COUNTIF(A1:A10,"*TBA*")
' Correctly accounts for wildcards (*), but isn't case-sensitive
=SUMPRODUCT(--EXACT(A1:A10,"TBA"))
' Is case-sensitive, but only finds whole cell values which match
=SUMPRODUCT(--EXACT(A1:A10,"*TBA*"))
' Doesn't recognise * as a wildcard, because it's
' literally only searching for cells with asterisks
' either side of the letters
为了解决我的问题,我编写了一个用户定义的函数,如下所示:
Option Compare Binary
' Case-sensitive COUNTIF
Function CS_Countif(rng As Range, str As String) As Long
Dim Matches As Long, cl As Range
For Each cl In rng
If InStr(cl.Value, str) > 0 Then Matches = Matches + 1
Next cl
CS_Countif = Matches
End Function
但是,此函数会减慢电子表格的计算速度,每次更新相关范围内的一个单元格时都会有明显的延迟。
任何人都可以想出本机 Excel 函数的组合(与 SUMPRODUCT/EXACT 的方式相同)来满足我的需求吗?谢谢
由于 FIND 区分大小写,您可以使用:
=COUNT(INDEX(FIND("TBA",A1:A7),))
只有 INDEX 函数,所以您不必数组输入公式。