【问题标题】:How to calculate average of each column excluding first two rows如何计算除前两行之外的每列的平均值
【发布时间】: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)

标签: vba excel average


【解决方案1】:

Application.Average 可以解决这个问题。下面是快速而肮脏的解决方案。

我的设置:

代码(很脏,根据需要修改):

Sub Ave()
    For i = 1 To 7 Step 2
    Columns(i).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Application.Average(Columns(i))
    Next i
End Sub

结果:

如果这有帮助,请告诉我们。

编辑:

根据您的规范尝试以下代码。

Sub Avg()

    Dim Sh1 As Worksheet, Sh2 As Worksheet
    Dim tRow As Long

    With ThisWorkbook
        Set Sh1 = .Sheets("combined")
        Set Sh2 = .Sheets("avg")
    End With

    With Sh2
        .Cells.ClearContents
        .Range("A1").Value = "Average return"
    End With

    tRow = 2

    For i = 4 To 66 Step 2
        Sh2.Range("A" & tRow).Value = Application.average(Sh1.Columns(i))
        tRow = tRow + 1
    Next i

End Sub

如果这有帮助,请告诉我们。

【讨论】:

  • 感谢您的回复。你展示的数据结构和我的一样。但是如果我输入 Application.Average(Columns(i)) 我得到#DIV/0!所有结果
  • (1) 我们的数据集相似吗? (2) 你是按原样复制代码的吗?
  • 数据集几乎一样。唯一的区别是我试图在其他工作表(sh2)中打印平均值。我只是把(原来的左边)= application.average(columns(col))
  • @user3067818:在编程方面,“几乎”是一个非常困难的词。 ;) 请修改您在上面的帖子,并在其中包含您的工作表名称和/或您的完整代码。如果其中大部分无关紧要,只需将它们编辑掉并留下工作表的名称以及您的声明。这对我们来说应该足够了。
  • 好的,我只是添加我的整个代码。 col 从 4 开始,因为第 1~3 列不用于计算平均值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
相关资源
最近更新 更多