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...
加上:
要查找列(在本例中为 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.
您宁愿完全限定您的范围,并避免使用 Select
,除非确实需要。
使用上面发布的代码,
Range("B100000").End(xlUp).Select
可能不需要。
如果用Cell.Formula = "=CountIFs..."
,用
可能会方便
Dim frm as String
frm = "=CountIFs..."
Cell.Formula = frm
更容易调试。
我一直在尝试将 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...
加上:
要查找列(在本例中为 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.您宁愿完全限定您的范围,并避免使用
Select
,除非确实需要。 使用上面发布的代码,Range("B100000").End(xlUp).Select
可能不需要。
如果用
可能会方便Cell.Formula = "=CountIFs..."
,用Dim frm as String frm = "=CountIFs..." Cell.Formula = frm
更容易调试。