Excel 平均3个值在1列中循环?
我需要一些代码方面的帮助。基本上,我只需要平均一列中的3个值,并继续该模式,直到没有更多的值。有人能帮忙吗 我想平均,例如,A1:A3,A4:A6..等等,直到没有更多的值。平均结果为B1:B2 上面的代码将用=AverageA1:C1的公式填充D列: 我建议Excel 平均3个值在1列中循环?,excel,vba,Excel,Vba,我需要一些代码方面的帮助。基本上,我只需要平均一列中的3个值,并继续该模式,直到没有更多的值。有人能帮忙吗 我想平均,例如,A1:A3,A4:A6..等等,直到没有更多的值。平均结果为B1:B2 上面的代码将用=AverageA1:C1的公式填充D列: 我建议 Option Explicit Sub testAverage() Const Window As Long = 3 Dim ws As Worksheet Set ws = ThisWorkbook.Work
Option Explicit
Sub testAverage()
Const Window As Long = 3
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim Target As Range
Set Target = ws.Range("A1", ws.Cells(ws.Rows.Count, "A").End(xlUp))
Dim iRow As Long
For iRow = 1 To Target.Rows.Count Step Window
ws.Cells((iRow \ Window) + 1, "C").Value = Application.WorksheetFunction.Average(ws.Cells(iRow, "A").Resize(RowSize:=Window))
Next iRow
End Sub
请注意,目标行ws.CellsiRow\Window+1,C.值是用整数除法iRow\Window+1计算的,不是普通除法
这可以在没有vba的情况下完成: 把这个放在C1中,然后抄下来:
=IFERROR(AVERAGE(INDEX(A:A,(ROW(1:1)-1)*3+1):INDEX(A:A,(ROW(1:1)-1)*3+3)),"")
使用数组
Option Explicit
Public Sub GetAverages()
Dim ws As Worksheet, numOutputRows As Long, arr(), i As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
With ws
arr = Application.Transpose(.Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row))
Dim outputArray(), rowCounter As Long
ReDim outputArray(1 To Round(UBound(arr) / 3, 0))
For i = 1 To UBound(arr) Step 3
rowCounter = rowCounter + 1
outputArray(rowCounter) = Application.WorksheetFunction.Average(arr(i), arr(i + 1), arr(i + 2))
Next
ws.Cells(1, 2).Resize(UBound(outputArray), 1) = Application.Transpose(outputArray)
End With
End Sub
你哪里有问题?你还没问过问题,怎么了?有错误吗?你在哪里卡住了?你的工作表看起来如何?截图或示例数据会很好吗?谢谢你的回答,不过可能我没有很好地解释我自己。我想把A1到A3,A4到A6的单元格取平均值,B1:B2的单元格取平均值。5 5 10 5 15 10 10 15 15你认为5 5 5 10 5 15 10 10 15 15在某种程度上改善了解释?
=IFERROR(AVERAGE(INDEX(A:A,(ROW(1:1)-1)*3+1):INDEX(A:A,(ROW(1:1)-1)*3+3)),"")
Option Explicit
Public Sub GetAverages()
Dim ws As Worksheet, numOutputRows As Long, arr(), i As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
With ws
arr = Application.Transpose(.Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row))
Dim outputArray(), rowCounter As Long
ReDim outputArray(1 To Round(UBound(arr) / 3, 0))
For i = 1 To UBound(arr) Step 3
rowCounter = rowCounter + 1
outputArray(rowCounter) = Application.WorksheetFunction.Average(arr(i), arr(i + 1), arr(i + 2))
Next
ws.Cells(1, 2).Resize(UBound(outputArray), 1) = Application.Transpose(outputArray)
End With
End Sub