Để 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.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!
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
Bạn xem file nhé!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!
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ả.Để 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.
Dạ cám ơn thầy nhiều, code đã ra đúng kết quả ạ.Để 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
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!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ả.