【发布时间】:2013-12-09 22:57:08
【问题描述】:
我试图计算除前两行之外的所有其他列的平均值。
因为前两行有字母,所以会导致错误。
我想我需要更改sh1.Columns(col) 这部分以排除前两行。
请给我一些想法。
谢谢
Sub average()
Dim sh1 As Worksheet, sh2 As Worksheet
Set sh1 = Sheets("combined")
Set sh2 = Sheets("avg")
Dim col As Long, row As Long
sh2.Cells.ClearContents
col = 4
Dim size As Long
'size = sh1.Range("A" & Rows.Count).End(xlUp).row
'size = sh1.Range(
sh2.Cells(1, 1).Value = "Average return"
'its from "parameter" sheet
For i = 1 To (42 - 11 + 1)
'error caused by first two rows which include letters
sh2.Cells(i + 1, 1).Value = Application.average(Columns(col))
col = col + 2
Next i
End Sub
【问题讨论】:
-
这有太多需要优化的地方,worksheetfunction.average 要求您提供一个范围,您正在计算整个列的平均值,只有在您的所有行都包含大多数情况下不会包含的值时才需要。 raplace sh1.column(col) 以获得更具体的范围。例如范围(单元格(10,col),单元格(1000,col))。这只会从单元格行 = 10 列 = col 到单元格行 = 1000 列 = col 的平均值。因此,如果您现在这样做,您可以指定它将从某一行开始,在本例中为 10。
-
感谢您的回复。我将 sh1.column(col) 替换为 sh1.Range(Cells(3, col), Cells(1008, col)) 但仍然出现错误,这一次它没有打印出任何内容。
-
改用
sh1.Cells(3, col).Resize(1008,1)