我在一张纸上有一个电子表格,其中 C 列中的值是使用 vlookup 语句的结果生成的,来自我在 A 列中输入的值。
在 A 列中输入所有值后,我需要能够计算 C 列中最多 51 行(从第 1 行到第 51 行)的单元格数,这些单元格中有一个值,不包括错误。
哦 - 顺便说一下,每次我进行计数时,都会使用不同的行数。
我试过使用:
ccc = Range("C:C").Cells.SpecialCells(xlCellTypeConstants).Count
但这只计算第一行,即我的标题行。
抱歉,如果已经有答案,但是我已经寻找了一段时间,但找不到任何东西。
谢谢。
您可以在没有 VBA 的情况下轻松执行此操作,但您可以尝试:
sub testy()
dim myRange as range
dim numRows as long
Set myRange = Range("C:C")
numRows = Application.WorksheetFunction.CountA(myRange) - _
myRange.SpecialCells(xlCellTypeFormulas, xlErrors).Count
end sub
您的代码不起作用,因为xlCellTypeConstants
专门告诉它只计算常量值,忽略公式计算值。
工作表函数CountA
仅计算具有以下值的单元格:
=CountA(C1:C51)
我们可以使用工作表函数函数从 VBA 调用任何工作表函数:
dim c as integer
c = WorksheetFunction.CountA([C1:C51])
CountIf
可用于跳过错误:
Skip errors with: `=COUNTIF(D5:D9,">0")`
您要对没有错误的单元格进行计数。用下面的公式替换你的 vlookup。因此,所有错误都将替换为"未找到"文本
=IFERROR(VLOOKUP(C1,A1:B3,2,FALSE), "NOT FOUND")
然后添加此值以查找非空白和非错误的单元格数
=COUNTA(D:D) - COUNTIF(D:D,"NOT FOUND")
假设:-
A:B 源范围
C 查找列
D vlookup 函数在此可能
对于VBA
cnt = Application.WorksheetFunction.CountA(D:D) - Application.WorksheetFunction.Countif(D:D, "NOT FOUND")