countif 输出 "true" 或 "false" 而不是数字 vba

countif outputting "true" or "false" rather than number vba

我一直在尝试将 countif 函数编写成一个循环,但是,我在输出方面遇到了一些问题。该函数不会在计算发生时读取数字,而是继续输出 "true" 或 "false"。也许我的代码有错误,但我过去使用过很多 countif 函数,没有遇到过这样的问题。正如您在下面看到的,我尝试以两种不同的方式编写该函数,但两者都不起作用或输出 "true" 或 "false".

请帮忙。

Sub CorrectSets()

Dim Cell As Range

Range("B100000").End(xlUp).Select
LastRow = ActiveCell.Row

For Each Cell In Range("S2:S" & LastRow)
    StartTime = Cell.Offset(0, -12)
    Shift = Cell.Offset(0, -14)
    SortedOp = Cell.Offset(0, -17)
    DOW = Cell.Offset(0, -5)
    'Cell.Value = CountIF(E2:E & LastRow, Shift, N2:N & LastRow ,DOW, B2:B & LastRow,SortedOp, G2:G & LastRow, " < " & StartTime)
    Cell.Value = "=CountIF(E2:E" & LastRow & ", " & Shift & ", N2:N" & LastRow & "," & DOW & ",     B2:B" & LastRow & "," & SortedOp & ", G2:G" & LastRow & ", " < " " & StartTime & ")"
Next Cell

如果你想在 Cell 中放入一个 countif() Formula 然后:

Cell.Formula = "=CountIF(E2:E &...............

如果要将公式的结果放入单元格,则:

Cell.Value = Application.Worksheetfunction.CountIF(E2:E &....................

你应该使用

Cell.Formula = "=CountIFs..."

Cell.Value = WorksheetFunction.CountIfs...

参见 official documentation

加上:

  1. 要查找列(在本例中为 B)中包含数据的最后一行,请使用

    Dim ws as Worksheet
    Set ws = ActiveSheet
    Dim LastRow as Long
    LastRow = ws.Range("B" & ws.Rows.Count).End(xlUp).Row
    

    ws 是对感兴趣的工作表的引用(在我的示例中为 ActiveSheet)。 见 this answer.

  2. 您宁愿完全限定您的范围,并避免使用 Select,除非确实需要。 使用上面发布的代码,

    Range("B100000").End(xlUp).Select
    

    可能不需要。

  3. 如果用Cell.Formula = "=CountIFs...",用

    可能会方便
    Dim frm as String
    frm = "=CountIFs..."
    Cell.Formula = frm
    

    更容易调试。