我正在研究一个宏,它应该计算术语“GM”出现在列中的次数。我决定像以前一样使用 countif 语句,并且效果很好。但是,由于某种原因,当我运行我的代码时,它每次都输出 0,这绝对是不正确的。我已经用其他列和字符串运行了相同的代码,它运行良好,但由于某种原因,如果我在这个特定列中搜索术语“GM”,它会失败。我唯一能想到的可能是 countif 仅在您要搜索的字符串是单元格中唯一的字符串时才有效,因为在所有情况下,代码都可以正常工作。在这种特殊情况下,我正在寻找的字符串不是单元格中唯一的字符串,并且代码失败了。我试图找到更多关于这是否属实的信息,但我在网上找不到任何东西。如果有人想看一下,这是代码:
Function OemRequest() As Long
Sheets("CS-CRM Raw Data").Select
Sheets("CS-CRM Raw Data").Unprotect
Dim oem As Long
Dim LastRow As Long
Dim LastColumn As Long
'Determines size of table in document
LastRow = Range("A" & Rows.Count).End(xlUp).row
LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
oem = Application.WorksheetFunction.CountIf(Range(2 & "2:" & 2 & LastRow), "gm")
OemRequest = oem
End Function
最佳答案
您是正确的 COUNTIF
所写的将仅匹配整个内容为“gm”的单元格。 COUNTIF
中的标准函数还将接受通配符,因此要匹配包含“gm”的单元格,请执行以下操作:
.CountIf(Range(2 & "2:" & 2 & LastRow), "*gm*")
更新
正如您所指出的,您的
Range
也存在问题。称呼。实际上,括号内的表达式将计算为 "22:2<LastRow>"
(其中 <LastRow>
是 LastRow
变量的值)。2
的里面应该有一个包含你感兴趣的列名的变量。像:Dim col as String
col = "B"
... Range(col & "2:" & col & LastRow) ...
这将评估为
"B2:B<LastRow>"
,这就是你想要的。
关于VBA countif 语句只返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616150/