Vba 使用电子表格中的单元格的公式

Vba 使用电子表格中的单元格的公式,vba,excel,formulas,Vba,Excel,Formulas,我正在寻找一种方法,使用Excel VBA将变量设置为a列中非空单元格的数量 Function CountNonEmptyCells(ColId As Integer) As Integer Dim r As Range Dim Count As Integer Set r = Sheet1.Columns(ColId) For Each cell In r.Cells If cell.Value <> "" Then Count = Count + 1 End If Next Co

我正在寻找一种方法,使用Excel VBA将变量设置为a列中非空单元格的数量

Function CountNonEmptyCells(ColId As Integer) As Integer
Dim r As Range
Dim Count As Integer
Set r = Sheet1.Columns(ColId)
For Each cell In r.Cells
If cell.Value <> "" Then
Count = Count + 1
End If
Next
CountNonEmptyCells = Count
End Function
所以伪代码

Dim j As Integer
j = CountA(A:A)

然而,这是行不通的。
j=“=CountA(A:A)”

像这样的东西也不会奏效。
VBA函数的工作原理与电子表格中的不同。您需要首先选择活动工作表的范围,然后调用counta函数

Dim j = Application.WorksheetFunction.counta(activeworksheet.range("A:A"))

将其粘贴到Excel VBA中的模块中

Function CountNonEmptyCells(ColId As Integer) As Integer
Dim r As Range
Dim Count As Integer
Set r = Sheet1.Columns(ColId)
For Each cell In r.Cells
If cell.Value <> "" Then
Count = Count + 1
End If
Next
CountNonEmptyCells = Count
End Function
函数CountNonEmptyCells(ColId为整数)为整数
调光范围
将计数设置为整数
集合r=Sheet1.列(ColId)
对于r.单元格中的每个单元格
如果单元格的.Value为“”,则
计数=计数+1
如果结束
下一个
CountNonEmptyCells=计数
端函数
我的最终结果是:

您也可以像这样使用求值函数:

Dim j As Long
j = [CountA(A:A)] 'brackets are shortcut for Evaluate
j = Evaluate("CountA(A:A)")
或者明确地像这样:

Dim j As Long
j = [CountA(A:A)] 'brackets are shortcut for Evaluate
j = Evaluate("CountA(A:A)")

基本上,您可以按照工作表上显示的方式计算公式,也可以调整语法以用作已采用的VBA命令。以下是每种方法的几个变体。请注意,我明确地包含了对父工作表的引用。这对于前两种评估方法尤其重要,并且对于所有四种变体都是可取的,以便您不会从错误的工作表中计算列A

Dim j As Long
j = [COUNTA(Sheet1!A:A)]
Debug.Print j
j = Evaluate("COUNTA(Sheet1!A:A)")
Debug.Print j
j = Application.CountA(Sheets("Sheet1").Columns(1))
Debug.Print j
j = Application.CountA(Range("Sheet1!A:A"))
Debug.Print j
第一个简单地使用[]作为
COUNTA
公式的包装,就像它会出现在工作表上一样。这将迫使对公式的评估产生结果。第二个是对公式的另一个求值,但使用
.Evaluate
命令可以选择使用串联、替换和其他文本解析方法将公式构造为字符串。如果对您更有意义,您可以将等号(例如=)作为前缀(例如
j=[=COUNTA(Sheet1!a:a)]
),但这不是必需的


在最后两种情况下,VBA采用本机工作表
COUNTA
函数,在其前面加上
Application.Worksheetfunction.
或(如上)只加上
Application.
。单元格范围也从工作表单元格表示法移到VBA样式的单元格表示法。

这行代码中至少有两个错误(一个在编译时,一个在运行时)