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

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 样式的单元格表示法。

【讨论】:

以上是关于使用电子表格中的单元格的公式的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义脚本的公式不会在 Google 电子表格中更新

如何根据单元格的所有可能值保存多个电子表格?

电子表格 - 基于其他单元格的条件格式单元格

使用 PHPExcel 设置电子表格单元格的宽度

根据另一个单元格的值自动填充单元格,不带公式

带有多个值的单元格的 Microsoft Excel 电子表格筛选器