Mình có bảng excel các dữ liệu tách thành các đoạn nhỏ, giờ mình muốn ghép lại. Làm thủ công tay thì dễ nhưng số dữ liệu quá lớn không thể làm nổi. Mong các bạn giúp đỡ.
Mình xin gửi file có yêu cầu bên trong.
Cảm ơn các bạn.
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Rws As Long, Tem As String
sArr = Range("A2:D" & Range("A2").End(xlDown).Row).Value
R = UBound(sArr): ReDim dArr(1 To R, 1 To 4)
With CreateObject("Scripting.Dictionary")
For I = 1 To R
Tem = sArr(I, 1) & "#" & sArr(I, 4)
If Not .Exists(Tem) Then
K = K + 1: .Add Tem, K
For J = 1 To 4
dArr(K, J) = sArr(I, J)
Next J
Else
Rws = .Item(Tem)
dArr(Rws, 3) = sArr(I, 3): dArr(Rws, 4) = sArr(I, 4)
End If
Next I
End With
Range("M2").Resize(K, 4) = dArr
End Sub
Qua xem ví dụ của bạn thì thấy kết quả chưa cụ thể và không có quy luật, vì vậy bạn cần giải thích rỏ hơn nữa.
Ví dụ: road_id tôi xem lại thì nó như thế này.
- road_id 0 thì như thế này: 0, 0.04, 0.11, 0.13, 0.14, 0.16, 0.17, 0.19, 0.21, 0.22, 0.23, 0.27, 0.31, 0.32 ...............9.
- road_id 1 thì như thế này: 1.01, 1.1, 1.21, 1.27, 1.36, 1.82.
- road_id 2 thì như thế này: 2.16, 2.22, 2.34, 2.35, 2.43, 2.44, 2.45, 2.47..............2.9.
Không giống như kết quả bạn đưa ra.
Bạn chạy thử code này rồi kiểm tra lại kết quả xem sao nhé.
PHP:Public Sub GPE() Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Rws As Long, Tem As String sArr = Range("A2:D" & Range("A2").End(xlDown).Row).Value R = UBound(sArr): ReDim dArr(1 To R, 1 To 4) With CreateObject("Scripting.Dictionary") For I = 1 To R Tem = sArr(I, 1) & "#" & sArr(I, 4) If Not .Exists(Tem) Then K = K + 1: .Add Tem, K For J = 1 To 4 dArr(K, J) = sArr(I, J) Next J Else Rws = .Item(Tem) dArr(Rws, 3) = sArr(I, 3): dArr(Rws, 4) = sArr(I, 4) End If Next I End With Range("M2").Resize(K, 4) = dArr End Sub
Cảm ơn bạn nhiều, bạn hướng dẫn giùm mình cách chạy code này với, mình vào menu nào của file excel để paste đoạn code này.
Hóa ra bạn chưa chạy code và chưa xem kết quả?
Gởi file cho bạn luôn. Bấm nút GPE là có kết quả.
Alt + F11 sẽ thấy Sub này trong Module1.
Chú ý là phải chọn Enable Macros khi Open file, file phải lưu kiểu .xlsm hoặc .xlsb
Hóa ra bạn chưa chạy code và chưa xem kết quả?
Gởi file cho bạn luôn. Bấm nút GPE là có kết quả.
Alt + F11 sẽ thấy Sub này trong Module1.
Chú ý là phải chọn Enable Macros khi Open file, file phải lưu kiểu .xlsm hoặc .xlsb
Bạn Ba Tê và các bạn giúp mình ghép dữ liệu file này với, mình đã viết nội dung cần giúp trong file excel, nằm ở sheet Yeu cau thuc hien. Cảm ơn các bạn nhiều lắm.
File trên 1MB nên mình k attach vào luôn được bài viết, các bạn download giùm mình.
http://www.mediafire.com/file/29fdcbfas5id3qe/AADT+5+nam.xlsx
"Đeo" theo 1 lần nữa xem sao.
Bạn kiểm tra lại xem sao, có dòng không giống kết quả của bạn.
"Đeo" theo 1 lần nữa xem sao.
Bạn kiểm tra lại xem sao, có dòng không giống kết quả của bạn.
Mong bạn Ba Tê giúp mình ghép dữ liệu nốt file này. Xin lỗi nếu mình làm phiền bạn quá. Cảm ơn bạn rất nhiều.
Mình bị quá quota kẹp file trong bài viết nên phải post link download.
http://www.mediafire.com/file/scnc6mnmu3mcrl1/Ghep+AADT+vao+tuong+ung.xlsx
Tôi "mệt" với dữ liệu của bạn, cột A là Text '002, cột I là Number format thành 002.
Sau này bạn sẽ "mệt" với kiểu dữ liệu như vậy. "Cái gì" thì ra "cái gì" để so sánh tìm kiếm chứ.
Bạn kiểm tra kết quả ở sheet2 xem sao.
Hix xin lỗi bạn nhiều, cột I chính là kết quả chạy bạn giúp mình hôm trước, chạy macro nó ra id là 2 thôi, mà mình phải cho bảng đó vào thuyết minh word khớp với các bảng khác nên mình chuyển format thành 002. Còn cột A là dữ liệu gốc mình được nhận, mình k biết viết lập trình nên k để ý nó là format dạng text (mọi khi mình dùng nó với lệnh countif để đếm số lượng thì vẫn dùng được nên k để ý).
Mình đã kiểm tra file bạn gửi thì thấy các kết quả aadt được ghép đều đúng, nhưng có các ô trống mà aadt không điền là sao hả bạn? Ví dụ dòng 10 trong sheet 2, đoạn có begin 280,61 end 280,65 chưa được điền aadt. Nếu xem tương ứng bên nhóm dư liệu 2 trong file mình upload nhờ bạn thì nó sẽ nằm trong đoạn ở dòng 220, có begin 279,54 end 281,11, do vậy sẽ điền được giá trị aadt ở ô L220 là 22584.
Mong bạn giúp mình xem lại. Mình xin cảm ơn.
If Arr1(I, 4) > Arr2(J, 2) And Arr1(I, 4) < Arr2(J, 3) Or _
Arr1(I, 5) > Arr2(J, 2) And Arr1(I, 5) < Arr2(J, 3) Then
dArr(I, 8) = dArr(I, 8) + Arr2(J, 4): dArr(I, 9) = dArr(I, 9) + 1
'Arr2(J, 2) = 0: Arr2(J, 3) = 0 <--------------Xóa dòng này'
End If
Lý do đơn giản là tôi không phải cùng ngành với bạn để hiểu dữ liệu nó thế nào. Cái nào lấy dữ liệu xong tôi xóa đi, dòng đó ở bảng 2 đã được lấy ở dòng 9 bảng 1, xóa rối, dòng 10 bảng 1 đâu tìm được nữa.
Bạn xóa 1 dòng lệnh trong code rồi kiểm tra lại xem.