Xin giúp đỡ về tổng hợp dữ liệu từ nhiều file đóng về 1 file theo điều kiện

Liên hệ QC

ducnv0709

Thành viên mới
Tham gia
3/3/13
Bài viết
40
Được thích
3
Chào mọi người, hiện mình đang mong muốn tạo nút cập nhật dữ liệu từ các file KT,TP DH....(và các fie tương ứng với các mục trong file "tong hop du lieu") đang đóng về file "Tong hop du lieu" dựa theo điều kiện ID sản phẩm. Nếu ID sản phẩm đúng thì sẽ lấy dữ liệu từ vùng dữ liệu bôi màu vàng của file KT vào vùng cột "kỹ thuật", file TP vào vùng cột " tạo phôi", file DH vào mục "định hình"......(và các file tương ứng vào các mục trong file "Tong hop du lieu"). Mình có tìm hiểu nhiều mục về tổng hợp dữ liệu nhưng chưa áp dụng được với các file của mình vì không hiểu về VBA lắm. Nhờ mọi người giúp sức nhé. Chân thành cảm ơn.
 

File đính kèm

  • Tong hop.rar
    472.2 KB · Đọc: 27
Chào mọi người, hiện mình đang mong muốn tạo nút cập nhật dữ liệu từ các file KT,TP DH....(và các fie tương ứng với các mục trong file "tong hop du lieu") đang đóng về file "Tong hop du lieu" dựa theo điều kiện ID sản phẩm. Nếu ID sản phẩm đúng thì sẽ lấy dữ liệu từ vùng dữ liệu bôi màu vàng của file KT vào vùng cột "kỹ thuật", file TP vào vùng cột " tạo phôi", file DH vào mục "định hình"......(và các file tương ứng vào các mục trong file "Tong hop du lieu"). Mình có tìm hiểu nhiều mục về tổng hợp dữ liệu nhưng chưa áp dụng được với các file của mình vì không hiểu về VBA lắm. Nhờ mọi người giúp sức nhé. Chân thành cảm ơn.
Lấy dữ liệu từ file đóng không phải là quá khó, nhưng dữ liệu của bạn quá rối rắm. Nhìn bằng mắt để xác định lấy cột nào mình nhìn mãi còn không ra huống chi dùng VBA (Nó phải là cột số bao nhiêu, hoặc có tiêu đề nhận biết trên cột)
Mình nghĩ như này chỉ có nước vlookup từng file thôi
 
Upvote 0
Lấy dữ liệu từ file đóng không phải là quá khó, nhưng dữ liệu của bạn quá rối rắm. Nhìn bằng mắt để xác định lấy cột nào mình nhìn mãi còn không ra huống chi dùng VBA (Nó phải là cột số bao nhiêu, hoặc có tiêu đề nhận biết trên cột)
Mình nghĩ như này chỉ có nước vlookup từng file thôi
Cảm ơn bạn, các vùng mình bôi vàng, file DH và TP thì vùng lấy dữ liệu là vùng "giao hàng", file KT vùng lấy dữ liệu cũng bôi vàng bạn ạ
 
Upvote 0
Chào mọi người, hiện mình đang mong muốn tạo nút cập nhật dữ liệu từ các file KT,TP DH....(và các fie tương ứng với các mục trong file "tong hop du lieu") đang đóng về file "Tong hop du lieu" dựa theo điều kiện ID sản phẩm. Nếu ID sản phẩm đúng thì sẽ lấy dữ liệu từ vùng dữ liệu bôi màu vàng của file KT vào vùng cột "kỹ thuật", file TP vào vùng cột " tạo phôi", file DH vào mục "định hình"......(và các file tương ứng vào các mục trong file "Tong hop du lieu"). Mình có tìm hiểu nhiều mục về tổng hợp dữ liệu nhưng chưa áp dụng được với các file của mình vì không hiểu về VBA lắm. Nhờ mọi người giúp sức nhé. Chân thành cảm ơn.
Có bạn nào biết chỉ giúp mình nhé. Cảm ơn cả nhà
 
Upvote 0
(và các file tương ứng vào các mục trong file "Tong hop du lieu")
là sao hả bạn?
FIle tương ứng là file nào?
các file nguồn copy vào file "Tong hop du lieu.xlsx" của bạn như thế nào? dò vị trí copy vào tương ứng với "các file tương ứng" như thế nào?
 
Upvote 0
là sao hả bạn?
FIle tương ứng là file nào?
các file nguồn copy vào file "Tong hop du lieu.xlsx" của bạn như thế nào? dò vị trí copy vào tương ứng với "các file tương ứng" như thế nào?
Gửi bạn ví dụ: tức là khi dò tìm đúng ID sản phẩm ở cột C file "tổng hợp dữ liệu" thì nó tự sẽ cập nhật dữ liệu của các cột T,U, V, W, X ( mục giao hàng trong file DH) vào các cột tương ứng AE, AF, AG AH, AI ( mục định hình của file "Tong hop du lieu"). Tương tự như vậy, đối với file TP sẽ là các cột BM,BN,BO,BP,BQ của mục giao hàng vào các cột Z, AA, AB, AC, AD của mục tạo phôi trong file " tong hop du lieu"...... Vì có nhiều file tương ứng với các mục của file tổng hợp nên muốn nhờ giúp 1-2 file trước rồi mình căn cứ vào đó để phát triển thêm, các file còn lại vẫn đang hoàn thiện phần chi tiết. Cảm ơn bạn nhiều.
 
Upvote 0
Chào mọi người, hiện mình đang mong muốn tạo nút cập nhật dữ liệu từ các file KT,TP DH....(và các fie tương ứng với các mục trong file "tong hop du lieu") đang đóng về file "Tong hop du lieu" dựa theo điều kiện ID sản phẩm. Nếu ID sản phẩm đúng thì sẽ lấy dữ liệu từ vùng dữ liệu bôi màu vàng của file KT vào vùng cột "kỹ thuật", file TP vào vùng cột " tạo phôi", file DH vào mục "định hình"......(và các file tương ứng vào các mục trong file "Tong hop du lieu"). Mình có tìm hiểu nhiều mục về tổng hợp dữ liệu nhưng chưa áp dụng được với các file của mình vì không hiểu về VBA lắm. Nhờ mọi người giúp sức nhé. Chân thành cảm ơn.
Làm thử cho bạn 2 mục, các mục còn lại bạn dựa vào đó mà làm nhé.

Mã:
Option Explicit
Sub Update_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1;HDR=No""")
        'CAP NHAT FILE KT VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\KT.XLSX].[Sheet1$A5:K200] b on a.F3=b.F3 Set a.[F6] = b.F10,a.F7=b.F11 ")
        'CAP NHAT FILE TP VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\TP.XLSX].[Sheet1$A5:BQ200] b on a.F3=b.F4 Set a.[F26] = b.F65,a.[F27] = b.F66")
    End With
End Sub
 
Upvote 0
Làm thử cho bạn 2 mục, các mục còn lại bạn dựa vào đó mà làm nhé.

Mã:
Option Explicit
Sub Update_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1;HDR=No""")
        'CAP NHAT FILE KT VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\KT.XLSX].[Sheet1$A5:K200] b on a.F3=b.F3 Set a.[F6] = b.F10,a.F7=b.F11 ")
        'CAP NHAT FILE TP VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\TP.XLSX].[Sheet1$A5:BQ200] b on a.F3=b.F4 Set a.[F26] = b.F65,a.[F27] = b.F66")
    End With
End Sub
Vâng, cảm ơn bạn nhiều, mình sẽ chạy thử nhé.
 
Upvote 0
Gửi bạn ví dụ: tức là khi dò tìm đúng ID sản phẩm ở cột C file "tổng hợp dữ liệu" thì nó tự sẽ cập nhật dữ liệu của các cột T,U, V, W, X ( mục giao hàng trong file DH) vào các cột tương ứng AE, AF, AG AH, AI ( mục định hình của file "Tong hop du lieu"). Tương tự như vậy, đối với file TP sẽ là các cột BM,BN,BO,BP,BQ của mục giao hàng vào các cột Z, AA, AB, AC, AD của mục tạo phôi trong file " tong hop du lieu"...... Vì có nhiều file tương ứng với các mục của file tổng hợp nên muốn nhờ giúp 1-2 file trước rồi mình căn cứ vào đó để phát triển thêm, các file còn lại vẫn đang hoàn thiện phần chi tiết. Cảm ơn bạn nhiều.
tôi tạo cho bạn cái sheet CopyData
bạn chọn file cần copy, ghi tên Sheet của file cần copy, ghi các cột bên file cần copy và tương ưng ghi tên các cột trên FIle "Tong hop du lieu.xlsm" cần ghi vào
vd: các cột trên file cần copy là T,U, V, W và các cột trên FIle "Tong hop du lieu.xlsm" cần ghi vào AE, AF, AG,AH thì copy từ cột T vào AE; U vào AF; V vào AG.......
tôi không có bẫy lỗi, bạn phãi nhập đúng thông tin nhá!!
Bài đã được tự động gộp:

Làm thử cho bạn 2 mục, các mục còn lại bạn dựa vào đó mà làm nhé.

Mã:
Option Explicit
Sub Update_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1;HDR=No""")
        'CAP NHAT FILE KT VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\KT.XLSX].[Sheet1$A5:K200] b on a.F3=b.F3 Set a.[F6] = b.F10,a.F7=b.F11 ")
        'CAP NHAT FILE TP VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\TP.XLSX].[Sheet1$A5:BQ200] b on a.F3=b.F4 Set a.[F26] = b.F65,a.[F27] = b.F66")
    End With
End Sub
Wow.. học thôi....
 

File đính kèm

  • Tong hop du lieu.xlsm
    80.3 KB · Đọc: 19
Upvote 0
tôi tạo cho bạn cái sheet CopyData
bạn chọn file cần copy, ghi tên Sheet của file cần copy, ghi các cột bên file cần copy và tương ưng ghi tên các cột trên FIle "Tong hop du lieu.xlsm" cần ghi vào
vd: các cột trên file cần copy là T,U, V, W và các cột trên FIle "Tong hop du lieu.xlsm" cần ghi vào AE, AF, AG,AH thì copy từ cột T vào AE; U vào AF; V vào AG.......
tôi không có bẫy lỗi, bạn phãi nhập đúng thông tin nhá!!
Bài đã được tự động gộp:


Wow.. học thôi....
Mình cảm ơn bạn
 
Upvote 0
Làm thử cho bạn 2 mục, các mục còn lại bạn dựa vào đó mà làm nhé.

Mã:
Option Explicit
Sub Update_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1;HDR=No""")
        'CAP NHAT FILE KT VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\KT.XLSX].[Sheet1$A5:K200] b on a.F3=b.F3 Set a.[F6] = b.F10,a.F7=b.F11 ")
        'CAP NHAT FILE TP VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\TP.XLSX].[Sheet1$A5:BQ200] b on a.F3=b.F4 Set a.[F26] = b.F65,a.[F27] = b.F66")
    End With
End Sub
Bạn ơi mình có thêm vào code để lấy thêm cột mà không chạy được, bạn xem thử giúp mình nhé. Thanks bạn nhiều
Option Explicit
Sub Update_HLMT()
With CreateObject("ADODB.Connection")
.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1;HDR=No""")
'CAP NHAT FILE KT VAO
.Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\KT.XLSX].[Sheet1$A5:K200] b on a.F3=b.F3 Set a.[F6] = b.F10,a.F7=b.F11 ")
'CAP NHAT FILE TP VAO
.Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\TP.XLSX].[Sheet1$A5:BQ200] b on a.F3=b.F4 Set a.[F26] = b.F65,a.[F27] = b.F66,a.[F28] = b.F67,a.[F29] = b.F68")
End With
End Sub
Bài đã được tự động gộp:

tôi tạo cho bạn cái sheet CopyData
bạn chọn file cần copy, ghi tên Sheet của file cần copy, ghi các cột bên file cần copy và tương ưng ghi tên các cột trên FIle "Tong hop du lieu.xlsm" cần ghi vào
vd: các cột trên file cần copy là T,U, V, W và các cột trên FIle "Tong hop du lieu.xlsm" cần ghi vào AE, AF, AG,AH thì copy từ cột T vào AE; U vào AF; V vào AG.......
tôi không có bẫy lỗi, bạn phãi nhập đúng thông tin nhá!!
Bài đã được tự động gộp:


Wow.. học thôi....
File của bạn rất hay, mình sẽ nghiên cứu thêm để áp dụng nhé. Cảm ơn bạn.
 
Upvote 0
Bạn ơi mình có thêm vào code để lấy thêm cột mà không chạy được, bạn xem thử giúp mình nhé. Thanks bạn nhiều
Option Explicit
Sub Update_HLMT()
With CreateObject("ADODB.Connection")
.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1;HDR=No""")
'CAP NHAT FILE KT VAO
.Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\KT.XLSX].[Sheet1$A5:K200] b on a.F3=b.F3 Set a.[F6] = b.F10,a.F7=b.F11 ")
'CAP NHAT FILE TP VAO
.Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\TP.XLSX].[Sheet1$A5:BQ200] b on a.F3=b.F4 Set a.[F26] = b.F65,a.[F27] = b.F66,a.[F28] = b.F67,a.[F29] = b.F68")
End With
End Sub
Bạn nên kiểm tra lại kiểu dữ liệu tương ứng giữa 2 trường trong 2 bảng dữ liệu cần cập nhật có chung kiểu hay là không nhé.
 
Upvote 0
Làm thử cho bạn 2 mục, các mục còn lại bạn dựa vào đó mà làm nhé.

Mã:
Option Explicit
Sub Update_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1;HDR=No""")
        'CAP NHAT FILE KT VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\KT.XLSX].[Sheet1$A5:K200] b on a.F3=b.F3 Set a.[F6] = b.F10,a.F7=b.F11 ")
        'CAP NHAT FILE TP VAO
        .Execute ("Update [DU LIEU$A5:BR200] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\TP.XLSX].[Sheet1$A5:BQ200] b on a.F3=b.F4 Set a.[F26] = b.F65,a.[F27] = b.F66")
    End With
End Sub
Bạn ơi mình đã áp dụng được vào công việc của mình rồi, cho mình hỏi thêm chút là có cách nào cải thiện tốc độ chạy được không, vì có cảm giác code chạy hơi chậm. Cảm ơn bạn nhiều.
 
Upvote 0
Bạn ơi mình đã áp dụng được vào công việc của mình rồi, cho mình hỏi thêm chút là có cách nào cải thiện tốc độ chạy được không, vì có cảm giác code chạy hơi chậm. Cảm ơn bạn nhiều.
Chịu thôi bạn, câu lệnh update trên sẽ "tiêu tốn nhiều năng lượng" đấy. Tạm thời dùng nó, sau này nếu bạn tìm được giải pháp nào cải thiện tốt hơn thì chuyển sang cái mới nhé.
 
Upvote 0
Mọi người ơi cho mình hỏi lỗi này là lỗi gì vậy, cảm ơn mọi người.
Option Explicit
Sub Update_HLMT_cat()
With CreateObject("ADODB.Connection")
.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1;HDR=NO""")
'CAP NHAT FILE CAT VAO
.Execute ("Update [2.1.KH-Panel$A4:AC10000] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\Nhap lieu TP.XLSX].[1.Nhap lieu panel$A4:AC10000] b on a.F1=b.F1 Set a.F1 = b.F1, a.F15 = b.F15, a.F21 = b.F21, a.F23 = b.F23, a.F27 = b.F27 ")
End With
End Sub

Loi data.jpg
 
Upvote 0
Mọi người ơi cho mình hỏi lỗi này là lỗi gì vậy, cảm ơn mọi người.
Option Explicit
Sub Update_HLMT_cat()
With CreateObject("ADODB.Connection")
.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;IMEX=-1;HDR=NO""")
'CAP NHAT FILE CAT VAO
.Execute ("Update [2.1.KH-Panel$A4:AC10000] a inner join [EXCEL 12.0;IMEX=1;HDR=NO;Database=" & ThisWorkbook.Path & "\Nhap lieu TP.XLSX].[1.Nhap lieu panel$A4:AC10000] b on a.F1=b.F1 Set a.F1 = b.F1, a.F15 = b.F15, a.F21 = b.F21, a.F23 = b.F23, a.F27 = b.F27 ")
End With
End Sub

View attachment 246205
Theo thông báo lỗi trên thì
Microsoft Access Engine datatabase dừng thực thi tiến trình vì bạn và 1 user khác cố gắng thay đổi cùng 1 dữ liệu ở cùng 1 thời điểm.

Đó lỗi đó, có thể fie bạn share nhiều người cùng chạy code, hoặc là bạn chạy code nhiều lần quá, Tránh các trường hợp như thế - có thể khắc phục lỗi.
 
Upvote 0
Theo thông báo lỗi trên thì
Microsoft Access Engine datatabase dừng thực thi tiến trình vì bạn và 1 user khác cố gắng thay đổi cùng 1 dữ liệu ở cùng 1 thời điểm.

Đó lỗi đó, có thể fie bạn share nhiều người cùng chạy code, hoặc là bạn chạy code nhiều lần quá, Tránh các trường hợp như thế - có thể khắc phục lỗi.
Cảm ơn bạn nhiều, mình vẫn dùng code này để chạy cho file khác thì vẫn chạy bình thường, chỉ riêng cho file này thì bị lỗi, đã xóa file và làm lại rồi mà vẫn không được, chưa hiểu lý do vì sao.
 
Upvote 0
Cảm ơn bạn nhiều, mình vẫn dùng code này để chạy cho file khác thì vẫn chạy bình thường, chỉ riêng cho file này thì bị lỗi, đã xóa file và làm lại rồi mà vẫn không được, chưa hiểu lý do vì sao.
Xóa các dòng trống (nhớ xóa cả dòng) dưới dữ liệu vùng nhập, rồi đóng file, trước khi chạy lần mới xem thế nào,
Thường xử lý dạng chuẩn cơ sở dữ liệu ở Excel không tốt (ví như với update, insert)...vv
 
Upvote 0
Web KT
Back
Top Bottom