VBA countif 语句只返回 0

标签 vba excel

我正在研究一个宏,它应该计算术语“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/

相关文章:

vba - 公式vba中循环的迭代

java - 从合并单元格的 Excel 文件中获取数据并存储在 MySQL 数据库中

excel - 如何使用 VBA 悬停并单击 Selenium Basic 的隐藏元素?

vba - 将函数输出分配给变量 Excel VBA 时出错

vba - 看不到什么 "subscript out of range"

excel - 有没有办法在单个单元格中使用下划线、粗体和斜体?

javascript - 如何将 Excel 数据复制到 HTML 表格?

vba - 创建包含常量或公式的所有单元格的命名范围?

excel - "Method range of global object"错误

excel - 调试发现错误 91 与 intersect(target, [range variable]).value