【问题标题】: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)"也没有

【问题讨论】:

    标签: vba excel formulas


    【解决方案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 样式的单元格表示法。

        【讨论】:

          猜你喜欢
          • 2016-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多