计数如果函数不正常工作在vba



我在让宏使用countif函数来显示给定单元格中得分的频率方面遇到了一些麻烦。这是我目前正在处理的一个更大的宏的一部分,用于从给定的导出数据集生成报告。

当我尝试运行代码时,它在我指定的单元格中返回所有零,即使那里有符合我的标准的数据。

如果你喜欢批评这段代码,请随意,因为我刚刚开始编程,想要学习尽可能多的东西。

提前感谢!

下面是代码的副本:

Dim i As Integer
Dim ws_raw As Worksheet
Dim ws_rpt As Worksheet
Set ws_raw = Sheets("Raw Data")
Set ws_rpt = Sheets("Report")
If ws_raw.Range("H2") <> "" Then
    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "5")
    ws_raw.Range("I2").Value = i
    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "6")
    ws_raw.Range("J2").Value = i
    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "7")
    ws_raw.Range("K2").Value = i
    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "8")
    ws_raw.Range("L2").Value = i
Else
End If

试试,

i = WorksheetFunction.CountIf(Range("S2:CCC2"), 5)

text -that- like-a-number与数字是不一样的;例:5<>"5" .

在相关注释中,明确引用。parent工作表被广泛认为是"最佳实践"。A…End With语句不仅可以清理代码,还可以加快速度。我也更喜欢使用Excel应用程序对象而不是工作表函数对象,因为任何错误都可以返回到变体。

Dim i As Variant
Dim ws_raw As Worksheet, ws_rpt As Worksheet
Set ws_raw = Sheets("Raw Data")
Set ws_rpt = Sheets("Report")
With ws_rpt
    If ws_raw.Range("H2") <> "" Then
        i = Application.CountIf(.Range("S2:CCC2"), 5)
        ws_raw.Range("I2").Value = i
        i = Application.CountIf(.Range("S2:CCC2"), 6)
        ws_raw.Range("J2").Value = i
        i = Application.CountIf(.Range("S2:CCC2"), 7)
        ws_raw.Range("K2").Value = i
        i = Application.CountIf(.Range("S2:CCC2"), 8)
        ws_raw.Range("L2").Value = i
    Else
    End If
End With

你已经把你正在计数的数字转换成文本,把它们放在双引号里-试试这个:

i = WorksheetFunction.CountIf(Range("S2:CCC2"), 5)
ws_raw.Range("I2").Value = i

i = WorksheetFunction.CountIf(Range("S2:CCC2"), 6)
ws_raw.Range("J2").Value = i

i = WorksheetFunction.CountIf(Range("S2:CCC2"), 7)
ws_raw.Range("K2").Value = i

i = WorksheetFunction.CountIf(Range("S2:CCC2"), 8)
ws_raw.Range("L2").Value = i

最新更新