thanhlp2007
Thành viên thường trực
- Tham gia
- 24/10/07
- Bài viết
- 201
- Được thích
- 11
Tôi nghĩ chắc cái này không tính bằng công thức được. Nếu bạn muốn dùng hàm tự tạo thì có thể dùng cái này:Nhờ các anh chị giúp xem có hàm nào tính trung bình hội tụ mà không phải qua từng bước không ?
Mình xin gửi file đính kèm
Function TrungBinhHoiTu(ParamArray Args() As Variant) As Double
Dim Arr1() As Variant, Arr2() As Variant, Arg As Long, i As Long, Item As Variant
For Arg = LBound(Args) To UBound(Args)
For Each Item In Args(Arg)
i = i + 1
ReDim Preserve Arr1(1 To i)
Arr1(i) = Item
Next
Next
Do Until UBound(Arr1) = 1
ReDim Arr2(1 To Int(UBound(Arr1) / 2))
For i = 1 To UBound(Arr2)
If (UBound(Arr1) Mod 2) And i = UBound(Arr2) Then
Arr2(i) = (Arr1(i * 2 - 1) + Arr1(i * 2) + Arr1(i * 2 + 1)) / 3
Else
Arr2(i) = (Arr1(i * 2 - 1) + Arr1(i * 2)) / 2
End If
Next
Arr1 = Arr2
Loop
TrungBinhHoiTu = Arr1(1)
End Function
Function ConvAve(byVal sArray) As Double
Dim i As Long, j As Long, Arr1(), Arr2(), Item
For Each Item In sArray
i = i + 1: ReDim Preserve Arr1(1 To i)
Arr1(i) = Item
Next
If UBound(Arr1) <= 3 Then
ConvAve = WorksheetFunction.Average(Arr1)
Else
For i = 1 To 2 * Int(UBound(Arr1) / 2) - 1 Step 2
j = j + 1: ReDim Preserve Arr2(1 To j)
If UBound(Arr1) - i = 2 Then
Arr2(j) = (Arr1(i) + Arr1(i + 1) + Arr1(i + 2)) / 3
Else
Arr2(j) = (Arr1(i) + Arr1(i + 1)) / 2
End If
Next
ConvAve = ConvAve(Arr2)
End If
End Function