Hỏi lại cho chắc.Xin chào tất cả mọi người!
Tôi đang gặp 1 vấn đề khó khăn nhờ mọi người nghiên cứu giúp. Cụ thể tôi đã nêu trong file đính kèm. Xin cảm ơn mọi người đã quan tâm!!!
Bạn chạy thử Macro này.Cảm ơn bạn!
Mình xin trả lời bạn như sau:
1-Số liệu 0 giờ ngày 01/2/2013 là số liệu 24 giờ ngày cuối tháng 1( sẽ không lấy). Số liệu lấy trong Sheet2 lấy từ 01 giờ ngày 01/02/2013 đến 0 giờ ngày 02/02/2013.
Trong Sheet2 mình có vào 1 số trị số mẫu lấy từ Sheet Dữ liệu.
2- Cột Max là chon gía trị gió lớn nhất trong ngày( Chọn trong 24 giờ). Nếu có nhiều giá trị lớn nhất bằng nhau thì chọn gía trị xuất hiện đầu tiên. Bạn xem ngày 1/2/2013(Sheet 2 ) bạn sẽ hiểu
Sub TH()
Dim DL, KQ1(1 To 31, 1 To 48), KQ2(1 To 31, 1 To 6), i As Long
DL = Sheet1.Range(Sheet1.[A65536].End(xlUp), Sheet1.[L3]).Value
On Error Resume Next
For i = 2 To UBound(DL, 1)
KQ1(Day(DL(i, 1)) + (DL(i, 2) = 0), ((DL(i, 2) + 23) Mod 24) * 2 + 1) = DL(i, 4)
KQ1(Day(DL(i, 1)) + (DL(i, 2) = 0), ((DL(i, 2) + 23) Mod 24) * 2 + 2) = DL(i, 3)
If DL(i, 5) > KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 2) Then
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 1) = DL(i, 6)
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 2) = DL(i, 5)
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 3) = TimeSerial(DL(i, 7), DL(i, 8), 0)
End If
If DL(i, 9) > KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 5) Then
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 4) = DL(i, 10)
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 5) = DL(i, 9)
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 6) = TimeSerial(DL(i, 11), DL(i, 12), 0)
End If
Next
Sheet2.[B5:AW35].Value = KQ1
Sheet2.[AZ5:BE35].Value = KQ2
End Sub
Vậy bạn sửa code lại như thế này (sửa chỗ màu đỏ)Trước tiên là mình cảm ơn bạn vì code của bạn đã giải quyết được bài toán của mình, rất hiệu quả.Sau nữa là mình có nhờ huuthang_bd cũng như các cô chú, các anh chị em giải quyết giúp vấn đề còn lại như sau:
1-Khi tốc độ gió ff=0 thì cho dd="-" ( Lấy ví dụ vào lúc 02 giờ ngày 18/2 trong file ghi dd/ff=NW/0 sẽ chuyển thành dd/ff= -/0
2- Không đọc giờ sáng, chiều nữa( AM,PM)
Ví dụ: 01:30 AM ghi là 01:30 hay 05:00 PM ghi là 17:00.
Xin chân thành cảm ơn!!!
Sub TH()
Dim DL, KQ1(1 To 31, 1 To 48), KQ2(1 To 31, 1 To 6), i As Long
DL = Sheet1.Range(Sheet1.[A65536].End(xlUp), Sheet1.[L3]).Value
On Error Resume Next
For i = 2 To UBound(DL, 1)
KQ1(Day(DL(i, 1)) + (DL(i, 2) = 0), ((DL(i, 2) + 23) Mod 24) * 2 + 1) = [COLOR=#ff0000]IIf(DL(i, 3) = 0, "-", DL(i, 4))[/COLOR]
KQ1(Day(DL(i, 1)) + (DL(i, 2) = 0), ((DL(i, 2) + 23) Mod 24) * 2 + 2) = DL(i, 3)
If DL(i, 5) > KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 2) Then
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 1) = DL(i, 6)
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 2) = DL(i, 5)
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 3) = TimeSerial(DL(i, 7), DL(i, 8), 0)
End If
If DL(i, 9) > KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 5) Then
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 4) = DL(i, 10)
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 5) = DL(i, 9)
KQ2(Day(DL(i, 1)) + (DL(i, 2) = 0), 6) = TimeSerial(DL(i, 11), DL(i, 12), 0)
End If
Next
Sheet2.[B5:AW35].Value = KQ1
Sheet2.[AZ5:BE35].Value = KQ2
End Sub
Cảm ơn bạn!
Vấn đề 1: đã được giải quyết, còn AM,PM vẫn chưa bạn ah!
Trời đất. Dạng file khác thì cách lấy dữ liệu sẽ khác. Bạn làm tôi thấy công sức của mình đổ hết xuống biển. Lẽ ra bạn cần gì phải nói ngay từ đầu. Nản...Huuthang_bd cho mình hỏi thêm:
Nếu dữ liệu đầu vào của mình không phải là dạng .xls mà là dạng .txt thì để chuyển dữ liệu sang Sheet2 như thế nào. Mình gửi file bạn tham khảo và tư vấn giúp mình
Bạn giải quyết được bài toán khó giúp mình bài toán khó, mình xin cảm ơn rất nhiều, rất nhiều!
Có điều nguyên bản dữ liệu của mình dạng .txt, sau vài thao tác nhỏ, mình chuyển dữ liệu về dạng .xls, khó khăn gì đâu.
Và bước tiếp theo bạn đã giúp mình.
Nhưng nếu có cách nào chuyển thẳng từ dạng .txt về sheet2 lại là 1 viêc khác, đúng không bạn!?