【发布时间】:2014-11-14 09:38:53
【问题描述】:
我是这方面的编程新手。我一直在寻找这个主题,但找不到任何适合我的问题的东西。
我有一组带有度量的数据。我有 31 行和 96 列。我希望我的 VBA 代码找到每列数据的平均值并将其显示在该列最后一个值之后的行上。
谁能帮帮我?
提前致谢。
【问题讨论】:
我是这方面的编程新手。我一直在寻找这个主题,但找不到任何适合我的问题的东西。
我有一组带有度量的数据。我有 31 行和 96 列。我希望我的 VBA 代码找到每列数据的平均值并将其显示在该列最后一个值之后的行上。
谁能帮帮我?
提前致谢。
【问题讨论】:
我找到的最简单的答案是使用以下方法:
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
您可以在数据下方的行中输入公式:
=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
【讨论】:
再次感谢您的回答。我能够自己弄清楚。我写的代码是:
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
【讨论】: