【问题标题】:Excel VBA: Using .formula with dynamic rangesExcel VBA:使用具有动态范围的 .formula
【发布时间】:2016-05-18 19:33:12
【问题描述】:

我正在尝试对它们自己列中的一些数据集进行平均。数据集的数量可能会改变,所以我平均的列数需要是动态的。

此外,我在每张工作表上都有多组数据集,并且由于数据集是动态的,我在代码的前面向工作表添加了列,因此我无法硬编码数据集的起点。换句话说,我不能说...

Range("L5").formula = "=AVERAGE(H5:K5)"

...因为我无法确定数据集从 H5 开始。它可能从 F5 或 G5 等开始。

所以我尝试将起点作为参数传递给 As Range 变量,但我不知道如何将其与 .formula 接口。

以下代码不起作用。我猜是因为我不能将范围变量放在这样的字符串中。

Sub Average()
Dim c As Range

Set c = Range("B5:B10")

Range("F5").FormulaR1C1 = "=Average(" & c & ")"

有没有办法在这样的 excel 公式中使用范围?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    它正在寻找地址,范围对象的默认值是值:

    Range("F5").Formula = "=Average(" & c.Address(0,0) & ")"
    

    【讨论】:

      【解决方案2】:

      如果要平均的范围是工作表上唯一的数据,您可以找到“最后一行”和“最后一列”,然后在公式中使用这些变量。

      查找最后一行:

      LastRow = Cells.Find("*", Range("A1"), xlFormulas, xlPart, _
              xlByRows, xlPrevious, False, False).Row
      

      要查找最后一列字母:

      LastCol = Split(Cells(1, ActiveSheet.Cells.Find(What:="*", _
          SearchDirection:=xlPrevious, _
          SearchOrder:=xlByColumns).Column).Address, "$")(1)
      

      中的公式将从:

      "=AVERAGE(H5:K5)"
      

      到:

      "=AVERAGE(H5:" & LastCol & Last Row & ")"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-30
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        • 2019-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多