Chuyển dữ liệu từ Sheet này sang Sheet khác

Liên hệ QC

vutienhp

Thành viên hoạt động
Tham gia
18/5/10
Bài viết
115
Được thích
148
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!!!
 
Lần chỉnh sửa cuối:
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!!!
Hỏi lại cho chắc.
- Theo như kết quả mẫu 1 dòng của bạn thì có phải dữ liệu 0 giờ của ngày 1 sẽ không được lấy qua Sheet2 và ngày cuối cùng sẽ không có dữ liệu lúc 24 giờ?
- Các cột Max là lấy max của cái gì? có phải là tốc độ không? Có phải nếu có nhiều cái max trong ngày thì lấy cái max đầu tiên?
 
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.
2- Cột Max là chon gía trị gió lớn nhất trong ngày.
 
Lần chỉnh sửa cuối:
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
Bạn chạy thử Macro này.
PHP:
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
 
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!!!
 
Anh tham khảo 1 cách dùng hàm nhé. Cái này chỉ tham khảo thôi vì tôc độ chậm anh ah.
 

File đính kèm

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!!!
Vậy bạn sửa code lại như thế này (sửa chỗ màu đỏ)
Mã:
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!
 
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
 
Lần chỉnh sửa cuối:
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
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...
 
Bạn giải quyết được bài toán khó giúp mình, 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, có 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!?
 
Lần chỉnh sửa cuối:
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!?

Làm được nhưng giá như bạn nói ngay từ đầu...
 
Cảm ơn bạn!
Mình sẽ liên lạc với bạn sau nhé!
 
Web KT

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

Back
Top Bottom