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

时间:2015-01-25 20:23:19

标签: excel vba excel-vba formulas

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

所以伪代码

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

然而,这不起作用。 j = "=CountA(A:A)"

也没有

4 个答案:

答案 0 :(得分:0)

这样的事情可以解决问题 VBA功能与电子表格本身的功能完全不同。您需要先选择活动工作表的范围,然后调用counta函数。

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

答案 1 :(得分:0)

将其粘贴到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

我的最终结果:

enter image description here

答案 2 :(得分:0)

您也可以使用评估功能

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

或明确地这样:

j = Evaluate("CountA(A:A)")

答案 3 :(得分:0)

基本上,您可以评估公式,就像它在工作表上显示一样,或者您可以调整语法以用作采用的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样式单元格表示法。