Xin giúp đỡ ghép dữ liệu (1 người xem)

  • Thread starter Thread starter nl7680
  • Ngày gửi Ngày gửi
Liên hệ QC

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

nl7680

Thành viên mới
Tham gia
23/1/15
Bài viết
9
Được thích
0
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.
 

File đính kèm

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.
 
Đúng là bạn này giải thích chưa rõ hết mọi vấn đề

Nên mình chỉ mới làm tới dòng trên 1800 gì đó thôi;

Khi cột cuối không có số liệu thì ghép sao đây?
 

File đính kèm

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.

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
 
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.

Cảm ơn bạn đã nhiệt tình giúp mình. Xin lỗi lúc mình gửi file là sắp vào học nên k kịp viết thuyết minh rõ. Mình xin viết lại ở đây.

Giải thích: road-id là mã tên đường. ví dụ với đường có mã số 002 (từ dòng 2 đến dòng 1773) được chia thành các đoạn nhỏ có begmp là điểm đầu begin, endmp là điểm cuối. Mỗi đoạn nhỏ có 1 thông số lưu lượng xe là aadt. Các đoạn nhỏ này có điểm đầu cuối nối tiếp nhau. Yêu cầu là cần ghép các đoạn nhỏ có cùng lưu lượng lại thành 1 đoạn lớn. VD 2 dòng đầu tiên 2 và 3, cùng lưu lượng là 9545 thì ghép thành 1 đoạn tổng có điểm đầu 0 và điểm cuối 0,11, aadt=9545. Tương tự với dòng 5 đến 8 có 4 đoạn nhỏ cùng lưu lượng 23679 thì ghép thành 1 đoạn to có điểm đầu 0,13, điểm cuối 0,19, aadt=23679.
 
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.
 
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
 

File đính kèm

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

Mình đã search ra cách chạy và ra được kết quả đúng rồi, mình có gửi tin nhắn cảm ơn bạn mà không hiểu sao nó k đến được hòm thư của bạn. Cảm ơn bạn nhiều lắm.
Giờ mình đang dùng code bạn viết hộ để lọc kết quả các file tương tự, sau khi tổng hợp xong lại có 1 vấn đề khác cần sự giúp đỡ, lúc đó mình xin nhờ bạn giúp mình nữa nhé.
 
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
 
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.
 

File đính kèm

Lần chỉnh sửa cuối:
"Đ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.

Mình đã xem lại. 2 ô bạn bôi vàng đúng là mình nhầm. Cảm ơn bạn nhiều nhiều lắm. Mình muốn nhấn Cảm ơn bài viết của bạn mà không thấy nút cảm ơn trên menu các bài post.
 
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.
 

File đính kèm

Lần chỉnh sửa cuối:
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.
 
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.

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.
PHP:
                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.

Mình đã xóa và kết quả đã ra đúng như yêu cầu, cho mình hỏi mình có thể sử dụng đoạn code này với các file tương tự được không (nhóm dữ liệu 1 giữ nguyên, nhóm dữ liệu 2 có chút thay đổi về số liệu - theo như mình thử thì có dòng ra đúng kết quả, có dòng lại chưa đúng). Cảm ơn bạn nhiều lắm.
 
Web KT

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

Back
Top Bottom