Xin giúp đỡ code tính trung bình theo tuần

Liên hệ QC

LYSM

Thành viên thường trực
Tham gia
16/3/11
Bài viết
290
Được thích
26
Em chào các bác!
Em có file kết quả muốn tính trung bình theo tuần của từng mã số như trong file đính kèm, xin các bác giúp đỡ em với ạ.
Em cám ơn!
 

File đính kèm

  • Trung binh tuan.xlsx
    17.7 KB · Đọc: 9
Em chào các bác!
Em có file kết quả muốn tính trung bình theo tuần của từng mã số như trong file đính kèm, xin các bác giúp đỡ em với ạ.
Em cám ơn!
Để xác định được "ẻm" nào thuộc tuần nào hơi bị khó, giải thuật hơi lu bu.
Cột Ngày trong Data phải liên tục.
Sửa tên sheet "Kết quả" thành "Ket qua" (Không dấu tiếng Việt).
PHP:
Option Explicit

Public Sub GPE()
Dim Data(), Kqua(), I As Long, K As Long, R As Long, N As Long, Dem As Long, Tong As Double, MaSo As String
    'Lay Data them 1 cot phu'
    Data = Sheets("Data").Range("A6", Sheets("Data").Range("A6").End(xlDown)).Resize(, 4).Value
    R = UBound(Data)
ReDim Kqua(1 To R, 1 To 3)
'----------Xac dinh tuan cua tung dong'
        K = 1
        Data(1, 4) = 1
    For I = 2 To R
        If Weekday(Data(I, 1), 1) = 4 And Weekday(Data(I - 1, 1), 1) = 3 Then K = K + 1
        Data(I, 4) = K  'STT tuan cua tung dong Data'
    Next I
    K = 0
'-------------------Xet theo tuan'
With Sheets("Ket qua")
    MaSo = .Range("B5").Value
    For I = 1 To R
        If Data(I, 2) = MaSo Then
            If Data(I, 4) <> N Then 'N la STT tuan'
                Tong = 0
                Dem = 0: K = K + 1
                N = Data(I, 4)
            End If
                Kqua(K, 1) = Data(I, 1)
                Kqua(K, 2) = Data(I, 2)
                Dem = Dem + 1
                Tong = Tong + Data(I, 3)
                Kqua(K, 3) = Tong / Dem
        End If
    Next I
    .Range("A8").Resize(1000, 3).ClearContents
    .Range("A8").Resize(K, 3) = Kqua
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em chào các bác!
Em có file kết quả muốn tính trung bình theo tuần của từng mã số như trong file đính kèm, xin các bác giúp đỡ em với ạ.
Em cám ơn!
Bạn xem file nhé!
Bài đã được tự động gộp:

Để xác định được "ẻm" nào thuộc tuần nào hơi bị khó, giải thuật hơi lu bu.
Tôi chỉ nghĩ đơn giản là chạy vòng lặp đến Weekday(Data(i+1, 1), 2) = 3 and Weekday(Data(i, 1), 2) = 2 thì đóng tuần và tính toán ghi kết quả (trừ dòng cuối của mảng). Khi đến dòng cuối của mảng thì cũng tính toán ghi kết quả.
 

File đính kèm

  • Trung binh tuan_LYSM.xlsm
    20 KB · Đọc: 7
Lần chỉnh sửa cuối:
Upvote 0
Để xác định được "ẻm" nào thuộc tuần nào hơi bị khó, giải thuật hơi lu bu.
Cột Ngày trong Data phải liên tục.
Sửa tên sheet "Kết quả" thành "Ket qua" (Không dấu tiếng Việt).
PHP:
Option Explicit

Public Sub GPE()
Dim Data(), Kqua(), I As Long, K As Long, R As Long, N As Long, Dem As Long, Tong As Double, MaSo As String
    'Lay Data them 1 cot phu'
    Data = Sheets("Data").Range("A6", Sheets("Data").Range("A6").End(xlDown)).Resize(, 4).Value
    R = UBound(Data)
ReDim Kqua(1 To R, 1 To 3)
'----------Xac dinh tuan cua tung dong'
        K = 1
        Data(1, 4) = 1
    For I = 2 To R
        If Weekday(Data(I, 1), 1) <> 3 Or Weekday(Data(I, 1), 1) = 3 Then
            Data(I, 4) = K
            If Weekday(Data(I, 1), 1) = 4 And Weekday(Data(I - 1, 1), 1) = 3 Then
                K = K + 1
                Data(I, 4) = K  'STT tuan cua tung dong Data'
            End If
        End If
    Next I
    K = 0
'-------------------Xet theo tuan'
With Sheets("Ket qua")
    MaSo = .Range("B5").Value
    For I = 1 To R
        If Data(I, 2) = MaSo Then
            If Data(I, 4) <> N Then 'N la STT tuan'
                Tong = 0
                Dem = 0: K = K + 1
                N = Data(I, 4)
            End If
                Kqua(K, 1) = Data(I, 1)
                Kqua(K, 2) = Data(I, 2)
                Dem = Dem + 1
                Tong = Tong + Data(I, 3)
                Kqua(K, 3) = Tong / Dem
        End If
    Next I
    .Range("A8").Resize(1000, 3).ClearContents
    .Range("A8").Resize(K, 3) = Kqua
End With
End Sub
Dạ cám ơn thầy nhiều, code đã ra đúng kết quả ạ.
Bài đã được tự động gộp:

Bạn xem file nhé!
Bài đã được tự động gộp:


Tôi chỉ nghĩ đơn giản là chạy vòng lặp đến Weekday(Data(i+1, 1), 2) = 3 and Weekday(Data(i, 1), 2) = 2 thì đóng tuần và tính toán ghi kết quả (trừ dòng cuối của mảng). Khi đến dòng cuối của mảng thì cũng tính toán ghi kết quả.
Vâng, đúng là như thế bác ạ, em cũng lọ mọ code nó ra nhưng thiếu tuần cuối và các mã phải xếp lần lượt theo thứ tự, bí quá lại lên đây hỏi. Cám ơn bác nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom