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

我正在寻找一种方法来设置一个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样式单元格符号。