簡體   English   中英

計算多個范圍的平均值

[英]To Calculate Average Value of Multiple Range

我正在嘗試計算多個范圍的平均值,如附圖所示。條件 - 它應該將“L”和“M”列的單元格值與“A”列的范圍相匹配並創建一個范圍(例如 322810到 324900)來計算與特定范圍(例如 322810 到 324900)相對的 B 列值的平均值。 我已經能夠編寫以下代碼,但顯然無法正常工作。

 Dim lastrow As Long
 Dim i As Long, j As Long

 With Worksheets("Source")
 lastrow = .Range("A" & .Rows.Count).End(xlUp).Row

 For i = 2 To lastrow + 1 'loop whole range (column C)
    If .Cells(i, "L") = .Range("A").Value Then 'If column L cell value match with any cell of Range "A"
        For j = i To lastrow 'Loop "group" range.
            If .Cells(j, "M") = .Range("A").Value Then ' (end of small group range) then apply formula
                .Cells(i, "N").Formula = "=AVERAGE(B" & i & ":B" & j & ")" 'AVG
                Exit For
            End If
        Next j
    End If
Next I
End With

各種幫助將不勝感激(公式或 VBA 代碼) 截屏

是的,BigBen 是對的。 這就是方法。 我的例子中的公式是

=AVERAGEIFS($B$3:$B$16,$A$3:$A$16,">="&L4,$A$3:$A$16,"<="&M4)

截屏

嘗試,

Sub test()
    Dim Lastrow As Long
    Dim i As Long, j As Long
    Dim r As Long
    Dim mPoint As Long
    Dim Ws As Worksheet
    Dim vDB, vR()
    Dim rngStart As Range, rngEnd As Range
    Dim rngDB As Range
    
    Set Ws = Worksheets("Source")


    With Ws
        Lastrow = .Range("A" & .Rows.Count).End(xlUp).Row
        vDB = .Range("L3", .Range("m" & .Rows.Count).End(xlUp))
        r = UBound(vDB, 1)
        ReDim vR(1 To r, 1 To 1)
 
        For i = 1 To r
            For k = 1 To Lastrow
                If .Range("a1").Cells(k) = vDB(i, 1) Then
                    Set rngStart = .Range("a1").Cells(k)
                    mPoint = rngStart.Row
                    Exit For
                End If
            Next k
            If rngStart Is Nothing Then
            Else
                For k = mPoint To Lastrow
                    If .Range("a1").Cells(k) = vDB(i, 2) Then
                        Set rngEnd = .Range("a1").Cells(k)
                        Exit For
                    End If
                Next k
            End If
            
            If rngStart Is Nothing Or rngEnd Is Nothing Then
            Else
               Set rngDB = .Range(rngStart, rngEnd).Offset(, 1)
               Debug.Print rngDB.Address
                vR(i, 1) = WorksheetFunction.Average(rngDB)
            End If
            Set rngStart = Nothing
            Set rngEnd = Nothing
        Next i
        .Range("n3").Resize(r) = vR
    End With

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM