Giúp mình đoạn Code xử lý số liệu với. Cảm ơn cả nhà! (1 người xem)

Liên hệ QC

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

honhutlinh

Thành viên mới
Tham gia
28/9/15
Bài viết
8
Được thích
0
Giúp mình đoạn Code xử lý số liệu NOx theo trung bình giờ với!

Chào cả nhà, thật sự từ khi tham gia diễn đàn này mình học được nhiều thứ lắm. Có khi vấn đề mình ngồi cả tuần cặm cụi vẫn không ra nhưng vào diễn đàn là có cao thủ ra tay tư vấn giúp.
Hi, giờ mình cần xử lý số liệu trong file đính kèm sau đây, vì số liệu khổng lồ nên mình nhờ mọi người xem viết code để giải quyết giúp mình với ạ.
Mình có số liệu trung bình giờ của 1 thông số về chất lượng không khí, mình cần phải tính giá trị trung bình cao nhất của thông số đó trong ngày trong 8 h.
Mỗi ngày sẽ có 24 giá trị được đo đạc, mình tính trung bình trong 1 ngày là trong 3 khoảng thời gian 0h-7h, 8h-15h, 16h-23h.
Tuy nhiên điều kiện để tính là số giá trị trong từng khoảng thời gian phải >=6 giá trị/8 giá trị.
Vì số liệu có khi bị mất nên chỉ khi nào 8h có >=6 giá trị thì mình mới tính trung bình; sau đó từ 3 giá trị trung bình đại diện cho 3 khoảng thời gian mình sẽ chọn ra giá trị cao nhất trong đó để ra kết quả cuối cùng.
Chi tiết mình trình bày trong file e xcel đính kèm.
Mọi người ơi, giúp Linh với.
Cảm ơn mọi người nhiều ạ.
Mail của linh: hnlinh@hcmus.edu.vn
Facebook: https://www.facebook.com/linh.honhut
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn ơi, mình xin lỗi. Thông cảm giúp mình, lúc nãy mình loay hoay nên post sai mình sẽ sửa lại ạ. Mình cảm ơn!
 
Upvote 0
Bạn ơi, mình xin lỗi. Thông cảm giúp mình, lúc nãy mình loay hoay nên post sai mình sẽ sửa lại ạ. Mình cảm ơn!
cho xin file với kết quả mẫu đi bạn.
như mình hiểu những gì bạn diễn đạt
thì tại mốc 7h 15h 23h thì sẽ tính trung bình 1 lần sau đó chọn ra số lớn nhất trong 3 giá trị đó làm giá trị cuối.
nếu trong khoảng đó mất 2 số liệu thì sẽ không tính đúng không
nếu vậy thì xem file thử nhé bạn
 

File đính kèm

Upvote 0
File nè bạn @langtuchungtinh360 ơi...
Nãy file nặng quá mình upload không được mà cứ tưởng up được rồi.
Sorry mọi người nhiều ạ.
Bạn xem giúp mình nhé!
 

File đính kèm

Upvote 0

File đính kèm

Upvote 0
Em ơi, khi nào em rãnh thì xem giúp anh cái này với nha @langtuchungtinh360... Anh định làm thủ công bằng tay luôn nhưng mà làm lâu quá.
Cảm ơn em nhiều lắm!
công thức cho cái này dễ thôi mà thầy
F2=IF(B2<>"";B2;IF(COUNT(C2:E2)>=2;AVERAGE(C2:E2);MAX(C2:E2)))
rồi #6 có đúng ý không thầy để còn biết.
 
Upvote 0
Hi #6 đúng rồi Tân ơi, nhưng em giúp anh cái sau bằng macro được ko em ??
Cảm ơn em nhiều!

Công thức thì như vầy:
PHP:
F2=IF(COUNT(B2:E2)>0;IF(B2>0;B2;AVERAGE(C2:E2));"")
Code thì thử cái này:
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, Num As Long
sArr = Range([A2], [A2].End(xlDown)).Resize(, 5).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
    Num = 0
    If sArr(I, 2) > 0 Then
        dArr(I, 1) = sArr(I, 2)
    Else
        For J = 3 To 5
            dArr(I, 1) = dArr(I, 1) + sArr(I, J)
            If sArr(I, J) > 0 Then Num = Num + 1
        Next J
        If Num > 0 Then dArr(I, 1) = dArr(I, 1) / Num
    End If
Next I
[H2:H1000].ClearContents
[H2].Resize(I - 1) = dArr
End Sub
So kết quả của code và công thức xem sao.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Công thức thì như vầy:
PHP:
F2=IF(COUNT(B2:E2)>0;IF(B2>0;B2;AVERAGE(C2:E2));"")
Code thì thử cái này:
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, Num As Long
sArr = Range([A2], [A2].End(xlDown)).Resize(, 5).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
    Num = 0
    If sArr(I, 2) > 0 Then
        dArr(I, 1) = sArr(I, 2)
    Else
        For J = 3 To 5
            dArr(I, 1) = dArr(I, 1) + sArr(I, J)
            If sArr(I, J) > 0 Then Num = Num + 1
        Next J
        If Num > 0 Then dArr(I, 1) = dArr(I, 1) / Num
    End If
Next I
[H2:H1000].ClearContents
[H2].Resize(I - 1) = dArr
End Sub
So kết quả của code và công thức xem sao.
thầy Ba bê có thể giải thích hộ em 2 dòng này được không thầy
sArr = Range([A2], [A2].End(xlDown)).Resize(, 5).Value
ReDim dArr
(1 To UBound(sArr, 1), 1 To 1)
em không hiểu ở chỗ Ubound
dòng này có phải cho dữ liệu từ ô A2 đến ô cuối cùng độ rộng mảng là 5 đơn vị phải không thầy
sArr = Range([A2], [A2].End(xlDown)).Resize(, 5).Value
em không hiểu dòng này
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)

 
Upvote 0
thầy Ba bê có thể giải thích hộ em 2 dòng này được không thầy
sArr = Range([A2], [A2].End(xlDown)).Resize(, 5).Value
ReDim dArr
(1 To UBound(sArr, 1), 1 To 1)
em không hiểu ở chỗ Ubound
dòng này có phải cho dữ liệu từ ô A2 đến ô cuối cùng độ rộng mảng là 5 đơn vị phải không thầy
sArr = Range([A2], [A2].End(xlDown)).Resize(, 5).Value
em không hiểu dòng này
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)

sArr = Range([A2], [A2].End(xlDown)).Resize(, 5).Value có nghĩa từ ô A2 đến hết ô cột A có dữ liệu mở rộng ra thêm 5 cột nghĩa là range(“a2:e” & lr) với lr là hàng cuối cùng có dữ liệu.
ReDim dArr(1 To UBound(sArr, 1), 1 To 1) nghĩa là khai báo mảng dArr có số hàng bằng số hàng mảng sArr, có 1 cột
 
Upvote 0
Công nhận phải nói là bạn tài thật... Thấy bạn viết code ầm ầm mà không hiểu cái Ubound là gì:
Thôi thì đọc bài link sau ắc sẽ rõ,...và sẽ nhớ nó...http://www.giaiphapexcel.com/forum/showthread.php?22361-Lbound-và-UBound-là-gì

----------------
Lúc trước tôi cũng như bạn, chả hiểu cái Ubound & cái Lbound là gì.... Đoc bài này rồi nhớ....

----------------
Toàn ghi macro rồi sửa lại thôi mà bác chứ có biết gì đâu @@ Mảng còn chưa biết nữa.
đang tính sửa lại code dùng mảng để ẩn với fix chiều cao ô bằng mảng xem nhanh hơn không
chứ duyệt qua từng ô thì mệt chết
 
Upvote 0
sArr = Range([A2], [A2].End(xlDown)).Resize(, 5).Value có nghĩa từ ô A2 đến hết ô cột A có dữ liệu mở rộng ra thêm 5 cột nghĩa là range(“a2:e” & lr) với lr là hàng cuối cùng có dữ liệu.
ReDim dArr(1 To UBound(sArr, 1), 1 To 1) nghĩa là khai báo mảng dArr có số hàng bằng số hàng mảng sArr, có 1 cột
từ ô A2 đến hết ô cột A có dữ liệu .... với lr là hàng cuối cùng có dữ liệu
Cái lr này từ đâu có. Từ CurrentRegion, UsedRange, End(xlup), End(xldown), SpecialCells(xlLastCell) ...?
- Trong 1 sheet có hơn 1 bảng dữ liệu cùng số cột nhưng trên các dòng khác nhau. (bảng 1 trên, bảng 2,3,4,5 dưới)
- Trong 1 cột dữ liệu các dòng không liên tục mà có cell trống. (từ A1:A1000 có cả đống cell A nào đó rỗng)
- Trong bảng dữ liệu cố định, có dòng có cell trống, có dòng tổng hay gì đó không liên quan đến dữ liệu mà không cần lọc.
- ......
 
Lần chỉnh sửa cuối:
Upvote 0
Cái lr này từ đâu có. Từ CurrentRegion, UsedRange, End(xlup), End(xldown), ...?
- Trong 1 sheet có hơn 1 bảng dữ liệu cùng số cột nhưng trên các dòng khác nhau. (bảng 1 trên, bảng 2,3,4,5 dưới)
- Trong 1 cột dữ liệu các dòng không liên tục mà có cell trống. (từ A1:A1000 có cả đống cell A nào đó rỗng)
- Trong bảng dữ liệu cố định, có dòng có cell trống, có dòng tổng hay gì đó không liên quan đến dữ liệu mà không cần lọc.
- ......

lr là ví dụ mà bác Ba tê như đặt x là ẩn ấy mà. Để đảm bảo chắc lấy dữ liệu tới hàng cuối cùng cháu hay chọn lộn từ dưới lên là [A65000].end(xlup) ^^
 
Upvote 0
lr là ví dụ mà bác Ba tê như đặt x là ẩn ấy mà. Để đảm bảo chắc lấy dữ liệu tới hàng cuối cùng cháu hay chọn lộn từ dưới lên là [A65000].end(xlup) ^^

Thì như tôi nói bên trên. Phải giải thích là End(xldown) chỉ khi lấy đến dòng cuối của bảng dữ liệu khi cột dữ liệu liên tục không có cell rỗng từ cell đầu đến cell cuối, và các trường hợp khác.
Mà hình như tác giả chỉ hỏi chỗ Ubound().
 
Upvote 0
Thì như tôi nói bên trên. Phải giải thích là End(xldown) chỉ khi lấy đến dòng cuối của bảng dữ liệu khi cột dữ liệu liên tục không có cell rỗng từ cell đầu đến cell cuối, và các trường hợp khác.
Mà hình như tác giả chỉ hỏi chỗ Ubound().
Thấy hỏi cả hai dòng trong đó đặc biệt là Ubound thì cháu hiểu biết đến đâu trả lời đến đấy. Nếu biết rồi thì biết thêm, nếu chưa biết thì ghi vào sổ ^^
 
Upvote 0
Tôi không bàn nữa đâu. Chỉ là câu hỏi "chưa rõ" thì giải thích nhiều khi "chưa trúng". Vậy thôi.
 
Upvote 0
Web KT

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

Back
Top Bottom