【问题标题】:average of an array of data vba excel数据数组的平均值vba excel
【发布时间】:2014-11-14 09:38:53
【问题描述】:

我是这方面的编程新手。我一直在寻找这个主题,但找不到任何适合我的问题的东西。

我有一组带有度量的数据。我有 31 行和 96 列。我希望我的 VBA 代码找到每列数据的平均值并将其显示在该列最后一个值之后的行上。

谁能帮帮我?

提前致谢。

【问题讨论】:

    标签: excel vba average


    【解决方案1】:

    我找到的最简单的答案是使用以下方法:

    Application.WorksheetFunction.Average(dataArray)

    这(假设)与在工作表中使用平均函数相同。唯一的缺点似乎是您必须使用数组或其他一些数据点列表。这很容易通过以下方式解决:

    Function getArray(dataRange As Range) As Variant()
        Dim arr(dataRange.Rows.Count, dataRange.Columns.Count) as Variant
        Dim i as Integer, j as Integer
    
        For i = 1 to dataRange.Rows.Count
            For j = 1 to dataRange.Columns.Count
                arr(i, j) = dataRange(i, j)
            Next
        Next
    
        getArray = arr
    End Function
    

    这会将范围转换为数组,并可通过Average 函数访问。例如:

    myAverage = Application.WorksheetFunction.Average(getArray(Range("C1:CT56")))

    【讨论】:

    • 你的答案的第一部分是正确的。第二个真的很可怕。你得到这样的数组:arr = [C1:CT56].Value2
    【解决方案2】:

    您可以在数据下方的行中输入公式:

    =average(A1:A96)
    

    这不是比使用 VBA 更容易吗?

    如果你真的想使用 VBA:

    Sub ownaverage()
      Dim totalsum As Double
      Dim totalnum As Double
      Dim ownav As Double
      totalsum = 0
      totalnum = 0
      For Each c In Worksheets("Sheet1").Range("D17:E17").Cells
        totalsum = totalsum + c.Value
        totalnum = totalnum + 1
      Next
      ownav = totalsum / totalnum
      ownaverage = ownav
      Range("I27").Select
      ActiveCell.FormulaR1C1 = ownaverage()
    End Sub
    

    循环参考:http://msdn.microsoft.com/en-us/library/office/aa221353(v=office.11).aspx

    【讨论】:

    • 不,因为我已经有一些代码可以制作一些图表,最终目的是用我得到的平均数字创建一个图表。所以我真的需要VBA代码。我的问题是创建一个循环,我可以在其中计算 96 列的所有平均值。
    • 再次感谢您的快速回答。我再次检查了您的代码并适应了我的代码。但我得到并溢出错误“6”。我所做的唯一更改是 .Range("C28:CT59").Cells 的范围,因为我有 31 行和 96 列。我也没有在代码中得到它,平均单元格在哪里。
    • 更改了我的代码以获得更大的范围并写入结果。
    【解决方案3】:

    再次感谢您的回答。我能够自己弄清楚。我写的代码是:

    Private Sub CommandButton2_Click()  
        Dim soma as Double  
        Dim media as Double  
        soma=0  
        media=0  
        totalnum=0  
        With Sheets("sheet1")  
           For j= 1 to 96  
               For i =28 to 58  
                  Set target = Cells (i,j)  
                  soma=soma+targe  
                  totalnum=totalnum+1  
               Next i  
               Cells(i+1,j).Value = soma/totalnum  
               soma=0  
               totalnum=0  
           Next j  
        End With
    End sub
    

    我希望这段代码能帮助和我有同样疑问的人。

    再次感谢 DaveG

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2023-03-26
      • 2020-12-15
      相关资源
      最近更新 更多