我正在研究一个宏,它应该计算术语“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
答案 0 :(得分:3)
你说的COUNTIF
只会匹配整个内容为" gm"的单元格。 COUNTIF
函数中的条件也会接受通配符,因此要匹配包含" gm"做:
.CountIf(Range(2 & "2:" & 2 & LastRow), "*gm*")
<强>更新强>
如您所述,您的Range
电话也存在问题。实际上,parens中的表达式将评估为"22:2<LastRow>"
(其中<LastRow>
是LastRow
变量的值)。
2
中应该有一个包含您感兴趣的列名的变量。例如:
Dim col as String
col = "B"
... Range(col & "2:" & col & LastRow) ...
这将评估为"B2:B<LastRow>"
,这是您想要的。
答案 1 :(得分:0)
另一种可能性:
oem = WorksheetFunction.CountIf(Columns(LastColumn).Cells(2).Resize(rowsize:=LastRow - 1), "gm")
这将计算包含"gm"
的单元格(如果需要,使用wilcards)在表格的最后一列中,第一行除外。 (它假设表左上角位于单元格"A1"
)
当然,如果您想计算任何其他列,您可以创建一个变量:
Dim lngCol as Long
lngCol = ...
oem = WorksheetFunction.CountIf(Columns(lngCol).Cells(2).Resize(rowsize:=LastRow - 1), "gm")
答案 2 :(得分:0)
我想这样
Sub Main()
Application.ScreenUpdating = 0
Dim Count As Double
Range("C1").Activate 'Firs row in the column
Do While ActiveCell.Value <> ""
If InStr(ActiveCell.Value, "MyText") Then
Count = Count + 1
End If
ActiveCell.Offset(1, 0).Activate
Loop
Application.ScreenUpdating = 1
End Sub
只有当数据单元格不为空时才会有效,如果工作表中间有空格,请执行以下操作:
Sub Main()
Application.ScreenUpdating = 0
Dim Count As Double
Range("C1").Activate
Do While ActiveCell.Row <> Rows.Count ' This wil evaluate all the rows in the 'C' Column
If InStr(ActiveCell.Value, "MyText") Then
Count = Count + 1
End If
ActiveCell.Offset(1, 0).Activate
Loop
Application.ScreenUpdating = 1
End Sub
希望它对你有用。