Dùng VBA tính trung bình 365 giá trị theo kiểu trượt (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

myguitar

Thành viên mới
Tham gia
23/10/14
Bài viết
29
Được thích
1
Cả nhà cho em hỏi bài này dùng VBA tính như thế nào ạ?
Em có một chuỗi số liệu P từ B1 đến B1000. Em phải tính tổng các trung bình như sau:
Tổng các trung bình của 365 giá trị đầu tiên (ký hiệu là EP), tính bằng: EP1= Sum(Average(B1:B365), Average(B2:B365),....,Average(B364:B365), Average(B365))
Sau đó next sang ô B2, tính tương tự: EP2=Sum(Average(B2:B366), Average(B3:B366), Average(B3:B366),...,Average(B365:B366),Average(B366))

Công thức toán học tính như thế này:
387cieHigPQRgAAAABJRU5ErkJggg==

Em có gửi tệp excel đính kèm.
Em cảm ơn cả nhà!
 

File đính kèm

Cả nhà cho em hỏi bài này dùng VBA tính như thế nào ạ?
Em có một chuỗi số liệu P từ B1 đến B1000. Em phải tính tổng các trung bình như sau:
Tổng các trung bình của 365 giá trị đầu tiên (ký hiệu là EP), tính bằng: EP1= Sum(Average(B1:B365), Average(B2:B365),....,Average(B364:B365), Average(B365))
Sau đó next sang ô B2, tính tương tự: EP2=Sum(Average(B2:B366), Average(B3:B366), Average(B3:B366),...,Average(B365:B366),Average(B366))

Công thức toán học tính như thế này:
387cieHigPQRgAAAABJRU5ErkJggg==

Em có gửi tệp excel đính kèm.
Em cảm ơn cả nhà!

PHP:
=GPE_EPG(B2;365)
Tự kiểm tra kết quả nhé
PHP:
Public Function GPE_EPG(Rng As Range, Num As Long) As Double
Dim Arr(), I As Long, Tem As Double
Arr = Rng.Resize(Num).Value
For I = 1 To Num
    Tem = Tem + Arr(I, 1)
Next I
GPE_EPG = Tem / Num
For I = 2 To Num
    Tem = Tem - Arr(I - 1, 1)
    GPE_EPG = GPE_EPG + (Tem / (Num - I + 1))
Next I
End Function
Hoặc bớt 1 For
PHP:
Public Function GPE2EPG(Rng As Range, Num As Long) As Double
Dim Arr(), I As Long, Tem As Double
Arr = Rng.Resize(Num).Value
Tem = Application.Sum(Rng.Resize(Num))
GPE2EPG = Tem / Num
For I = 2 To Num
    Tem = Tem - Arr(I - 1, 1)
    GPE2EPG = GPE2EPG + Tem / (Num + 1 - I)
Next I
End Function
Code này chỉ biết chạy, muốn "tối u" hay "tối xơ" code thì chờ các thành viên khác nhé.
 
Lần chỉnh sửa cuối:
Ô D1 bạn để trống, D2=D1+1/(367-ROW()) kéo xuống D366.
Công thức C2=SUMPRODUCT(B2:B366,$D$2:$D$366) kéo xuống C1000
 
Bài này tương tự như một bài tôi đã giải thích rồi.
Nếu làm đẻ dùng thì chú trọng đơn giản, và gần với yêu cầu.
Nếu làm bài tập thì chú trọng áp dụng mẹo toán để giảm con số tính toán - tức là phải giải sử máy rất yếu, làm toán như thế nào càng ít mệt máy càng tốt.

Bạn phải xác định muốn theo đường lối nào.
 
Cả nhà cho em hỏi bài này dùng VBA tính như thế nào ạ?
Em có một chuỗi số liệu P từ B1 đến B1000. Em phải tính tổng các trung bình như sau:
Tổng các trung bình của 365 giá trị đầu tiên (ký hiệu là EP), tính bằng: EP1= Sum(Average(B1:B365), Average(B2:B365),....,Average(B364:B365), Average(B365))
Sau đó next sang ô B2, tính tương tự: EP2=Sum(Average(B2:B366), Average(B3:B366), Average(B3:B366),...,Average(B365:B366),Average(B366))
Công thức toán học tính như thế này:
Em có gửi tệp excel đính kèm.
Em cảm ơn cả nhà!
Lính mới tập viết VBA
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom