使用电子表格中的单元格的公式
Posted
技术标签:
【中文标题】使用电子表格中的单元格的公式【英文标题】:Formula using Cells in the spreadsheet 【发布时间】:2015-03-24 07:56:59 【问题描述】:我正在寻找一种使用 Excel VBA 将变量设置为等于 A 列中非空单元格数量的方法。
所以伪代码
Dim j As Integer
j = CountA(A:A)
但这不起作用。 j = "=CountA(A:A)"
也没有
【问题讨论】:
【参考方案1】:这样的事情就可以解决问题。 VBA 函数的工作方式与电子表格本身的工作方式不同。您需要先选择活动工作表的范围,然后调用 counta 函数。
Dim j = Application.WorksheetFunction.counta(activeworksheet.range("A:A"))
【讨论】:
这行代码至少有两个错误(一个在编译,一个在运行时)【参考方案2】:将其粘贴到 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
我的最终结果:
【讨论】:
【参考方案3】:你也可以像这样使用评估函数:
Dim j As Long
j = [CountA(A:A)] 'brackets are shortcut for Evaluate
或明确地像这样:
j = Evaluate("CountA(A:A)")
【讨论】:
【参考方案4】:基本上,您可以评估公式,因为它会出现在工作表上,或者您可以调整语法以用作采用的 VBA 命令。以下是每种的几种变体。请注意,我明确包括对父工作表的引用。这对于前两个 evaluate 方法尤其重要,并且对于所有四个变体都是可取的,这样您就不会从错误的工作表中计算 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
命令允许您选择使用连接、替换和其他文本解析方法将公式构造为字符串。如果对您更有意义,您可以包含 equals 符号(例如 =)作为前缀(例如 j = [=COUNTA(Sheet1!A:A)]
),但这不是必需的。
在最后两个中,VBA 采用本机工作表COUNTA
函数,在其前面加上Application.Worksheetfunction.
或(如上)只是Application.
。单元格范围也从工作表单元格表示法移动到 VBA 样式的单元格表示法。
【讨论】:
以上是关于使用电子表格中的单元格的公式的主要内容,如果未能解决你的问题,请参考以下文章