Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 平均3个值在1列中循环?_Excel_Vba - Fatal编程技术网

Excel 平均3个值在1列中循环?

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

我需要一些代码方面的帮助。基本上,我只需要平均一列中的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.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