首页 > 解决方案 > 对未指定的列范围进行平均时遇到问题

问题描述

我正在尝试将一列中的所有行平均到多列(数量不确定)。我知道我可以编写一个代码来一次完成每一列,但我希望找到一种缩短代码长度的方法。

到目前为止,我已经设法平均一列 (B),但似乎无法自动填充最后一列,这可能会改变长度。我也试过做一个 if 语句,比如“如果上面一行有一个值,那么做平均”,但我不太擅长使用 VBA,所以真的不知道该怎么做。我需要帮助对所有包含值的列进行与下面代码中所示相同的平均。我的值特别从第 5 行开始,一直下降到一个未指定的范围。

Dim rng1 As Range
Dim rng2 As Range
Dim myavg As Range

Set rng1 = Range("B5")
Set rng2 = Range("B5").End(xlDown)
Set myavg = Range("B5").End(xlDown).Offset(1, 0)

myavg = "=Average(" & rng1.Address & ":" & rng2.Address & ")"

标签: excelvbaaverage

解决方案


您可以Do While按如下方式使用:

Dim rng1 As Range
Dim rng2 As Range
Dim myavg As Range

Set rng1 = Range("B5")

Do While rng1.Value <> ""
    Set rng2 = Cells(Rows.count, rng1.Column).End(xlUp) ' using @Chronocidal's suggestion above
    Set myavg = rng2.Offset(1, 0)

    myavg.Formula = "=Average(" & rng1.Address & ":" & rng2.Address & ")"

    Set rng1 = rng1.Offset(0, 1)
Loop

推荐阅读