在电子表格中使用单元格的公式
我正在寻找一种方法来设置一个variables等于使用Excel VBA列A中的非空单元格的数量。
所以伪代码
Dim j As Integer j = CountA(A:A)
但是这不起作用。 j = "=CountA(A:A)"
也不
像这样的事情会做的伎俩。
VBA函数与电子表格本身不一样。 您需要先select活动工作表的范围,然后调用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
我的最终结果是:
你也可以像这样使用评估函数 :
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
命令允许您select使用连接,replace和其他文本parsing方法将公式构造为string。 如果对您更有意义,您可以包含一个等号 (例如=)作为前缀(例如j = [=COUNTA(Sheet1!A:A)]
),但这不是必需的。
在过去的两个版本中,VBA通过使用Application.Worksheetfunction.
对其进行初始化来采用本地工作表COUNTA
函数Application.Worksheetfunction.
或(如上)只是Application.
。 单元格范围也从工作表单元格符号移动到VBA样式单元格符号。