如果function不正常vba中计数

我有一些麻烦让我的macros使用countif函数来显示给定单元格中的分数的频率。 这是我目前正致力于从给定的一组导出数据中生成报告的一个更大的macros的一部分。

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

如果您想批评这些代码,请随时留下,因为我刚刚开始编程,希望尽可能地学习。

提前致谢!

这里是一个代码的副本:

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) 

文字看起来像一个数字是不一样的一个数字; 例如5<>"5"

在相关说明中,明确引用.Parent工作表被广泛认为是“最佳实践”。 A With … End With语句不仅可以清理代码,还可以加快速度。 我还喜欢在WorksheetFunction对象上使用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