【发布时间】:2019-07-08 14:56:44
【问题描述】:
我正在尝试将一列中的所有行与多列(数量不确定)进行平均。我知道我可以编写一个代码来一次完成每一列,但我希望找到一种方法来缩短代码长度。
到目前为止,我已经设法平均一列 (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 & ")"
【问题讨论】:
-
小注:一般建议从底部开始使用
End(xlUp),而不是从顶部开始使用End(xlDown)——如果数据的最底部单元格是B5,那么这样就可以了一直到 B1048576。 -
感谢您的评论。我确实尝试过,并最终将我行中最后一个单元格的所有数据平均下来,一直到数千行,因为我不擅长编写 VBA。因此,我放弃了,改为这样写。
-
试试
Set rng2 = Range("B5").EntireColumn.Cells(Rows.Count,1).End(xlUp)- 这将从列的底部开始,然后向上移动,直到它到达数据或工作表的顶部。然后你可以使用Set myavg = rng2.Offset(1,0)来获取下一个单元格 -
谢谢。那行得通。您是否还知道我如何在接下来的几列中轻松地执行相同的公式?现在我希望平均所有列中的行,直到我到达 S(但如上所述,此列范围可能会改变)。
-
@Jesse 您可以使用
Do While rng1.Value <> ""并在每个循环中将rng1偏移一列。