我正在寻找一种方法,使用Excel VBA将变量设置为等于A列中的非空单元格数。
所以伪代码
Dim j As Integer
j = CountA(A:A)
然而,这不起作用。 j = "=CountA(A:A)"
答案 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
我的最终结果:
答案 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样式单元格表示法。