繁体   English   中英

Excel VBA:使用带有动态范围的.formula

[英]Excel VBA: Using .formula with dynamic ranges

我正在尝试平均一些属于他们自己列的数据集。 数据集的数量可能会发生变化,因此我平均需要的列数是动态的。

另外,我在每个工作表上都有多组数据集,并且因为数据集是动态的,所以我在代码的前面向工作表中添加了列,因此我无法对数据集的起点进行硬编码。 换句话说,我不能只说...

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公式的范围?

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

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

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

要查找最后一行:

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 & ")"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM