Nhờ giúp đỡ code lấy dữ liệu duy nhất từ nhiều bảng

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Eric.Shen

Thành viên chính thức
Tham gia
26/1/23
Bài viết
74
Được thích
9
Chào các bác!
Em đang cần tổng hợp dữ liệu từ nhiều bảng trong cùng một sheet lại với nhau và lấy giá trị duy nhất
Chi tiết như em gửi file đính kèm
Nhờ các bác giúp em với ạ
 

File đính kèm

  • Book1.xlsb
    8.3 KB · Đọc: 19
Chào các bác!
Em đang cần tổng hợp dữ liệu từ nhiều bảng trong cùng một sheet lại với nhau và lấy giá trị duy nhất
Chi tiết như em gửi file đính kèm
Nhờ các bác giúp em với ạ
Bài này dùng thủ công nhanh hơn viết code.
 
Lần chỉnh sửa cuối:
Upvote 0
Làm chậm cũng không đến hai phút.
Bác hướng dẫn em với ạ
dữ liệu của em trong 1 sheet có khoảng 18 - 25 bảng nhỏ như vậy ạ
Bài đã được tự động gộp:

Các bác ơi,
Em muốn tổng hợp thêm cả số lượng của từng bảng nhỏ vào bên cạnh nữa ạ
 

File đính kèm

  • Book1 rev.xlsb
    8.3 KB · Đọc: 18
Lần chỉnh sửa cuối:
Upvote 0
trong 1 sheet có khoảng 18 - 25 bảng nhỏ như vậy ạ
Anh Tuấn nói đúng mà bạn, trong 1 sheet mà có tới 18-25 bảng nhỏ như vậy thì viết luôn mấy công thức đơn giản, gắp dữ liệu cho vào bảng tổng hợp là được thôi, chứ code làm gì cho mất thời gian trong khi không hiệu quả bằng công thức. Có lẽ nào ngay cả hàm Vlookup và Iferror mà bạn cũng không sử dụng được ?
 
Upvote 0
Mất vài ba phút mỗi lần nhưng công việc lặp lại thường xuyên thì cũng tốn kha khá công sức đấy.

Hồi còn đi làm, mỗi khi gặp tình huống ước chừng phải làm lặp lại chừng 3 - 5 lần là tôi viết code. Thời gian tiết kiệm được để thư giãn đầu óc.
 
Upvote 0
Anh Tuấn nói đúng mà bạn, trong 1 sheet mà có tới 18-25 bảng nhỏ như vậy thì viết luôn mấy công thức đơn giản, gắp dữ liệu cho vào bảng tổng hợp là được thôi, chứ code làm gì cho mất thời gian trong khi không hiệu quả bằng công thức. Có lẽ nào ngay cả hàm Vlookup và Iferror mà bạn cũng không sử dụng được ?
Cảm ơn bác, mỗi bảng của em có nhiều dòng dữ liệu, gắp vào chung rồi remove duplicates sau đó vlookup lấy dữ liệu từ nhiều bảng thì cũng mất không ít thời gian bác ạ
chưa kể là em còn phải làm nhiều khi dữ liệu cập nhật mới, nên em muốn nhờ các bác ở đây viết code giúp em ạ
 
Upvote 0
Cảm ơn bác, mỗi bảng của em có nhiều dòng dữ liệu, gắp vào chung rồi remove duplicates sau đó vlookup lấy dữ liệu từ nhiều bảng thì cũng mất không ít thời gian bác ạ
chưa kể là em còn phải làm nhiều khi dữ liệu cập nhật mới, nên em muốn nhờ các bác ở đây viết code giúp em ạ
Bạn có thể up file có cấu trúc thật của bạn lên được không, không cần chứa dữ liệu thật.
Mình nghĩ nếu chỉ thao tác trong 1 sheet của 1 file thôi thì xài công thức vô tư.
 
Upvote 0
Bác hướng dẫn em với ạ
dữ liệu của em trong 1 sheet có khoảng 18 - 25 bảng nhỏ như vậy ạ
Bài đã được tự động gộp:

Các bác ơi,
Em muốn tổng hợp thêm cả số lượng của từng bảng nhỏ vào bên cạnh nữa ạ
Làm cho bạn 3 bảng theo mẫu, nhiều bảng thì bạn có thể dùng vòng lặp để nối vào:

Mã:
Sub Gop_HLMT()
    Dim strSQL As String
    strSQL = "SELECT 'Bang 1' as Rng, * From [A2:B5] Where F1 Is Not Null UNION ALL SELECT 'Bang 2' as Rng, * From [D2:E7] Where F1 Is Not Null UNION ALL SELECT 'Bang 3' as Rng, * From [H2:I9] Where F1 Is Not Null"
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
        Sheet1.Range("M2").CopyFromRecordset .Execute("TRANSFORM Sum(a.F2) SELECT a.F1 FROM (" & strSQL & ") a GROUP BY a.F1 PIVOT a.Rng")
    End With
    
End Sub
 
Upvote 0
Làm cho bạn 3 bảng theo mẫu, nhiều bảng thì bạn có thể dùng vòng lặp để nối vào:

Mã:
Sub Gop_HLMT()
    Dim strSQL As String
    strSQL = "SELECT 'Bang 1' as Rng, * From [A2:B5] Where F1 Is Not Null UNION ALL SELECT 'Bang 2' as Rng, * From [D2:E7] Where F1 Is Not Null UNION ALL SELECT 'Bang 3' as Rng, * From [H2:I9] Where F1 Is Not Null"
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
        Sheet1.Range("M2").CopyFromRecordset .Execute("TRANSFORM Sum(a.F2) SELECT a.F1 FROM (" & strSQL & ") a GROUP BY a.F1 PIVOT a.Rng")
    End With
   
End Sub
Em cảm ơn bác ạ,
Excel của em đang không chạy được code trên
Em dùng excel 2016 bác ạ
 
Upvote 0
Bạn có thể up file có cấu trúc thật của bạn lên được không, không cần chứa dữ liệu thật.
Mình nghĩ nếu chỉ thao tác trong 1 sheet của 1 file thôi thì xài công thức vô tư.
Đây là ví dụ với 6 bảng bác nhé.
Mỗi lần dữ liệu sẽ làm mới toàn bộ dữ liệu
Làm bằng công thức cũng được bác ơi, nhưng nó mất nhiều thời gian và nặng nếu lưu công thức sẵn
 

File đính kèm

  • Book1 rev1.xlsb
    145.5 KB · Đọc: 18
Upvote 0
Ô, code này ngắn gọn mà nó chạy nhanh thật. Mặc dù em không hiểu nó là gì nhưng nhanh. 0.19s cho 6000 dòng.
 
Upvote 0
Ô, code này ngắn gọn mà nó chạy nhanh thật. Mặc dù em không hiểu nó là gì nhưng nhanh. 0.19s cho 6000 dòng.
Anh HLMT là đỉnh cao về ADO rồi.
Bài đã được tự động gộp:

Đây là ví dụ với 6 bảng bác nhé.
Mỗi lần dữ liệu sẽ làm mới toàn bộ dữ liệu
Làm bằng công thức cũng được bác ơi, nhưng nó mất nhiều thời gian và nặng nếu lưu công thức sẵn
Modify Code anh HLMT:

Mã:
Sub Gop_HLMT()
    Dim strSQL As String
    strSQL = "SELECT 'Bang 1' as Rng, * From [I4:J1001] Where F1 Is Not Null UNION ALL SELECT 'Bang 2' as Rng,* From [L4:M1001] Where F1 Is Not Null UNION ALL SELECT 'Bang 3' as Rng,* From [O4:P1001] Where F1 Is Not Null UNION ALL SELECT 'Bang 4' as Rng,* From [R4:S1001] Where F1 Is Not Null UNION ALL SELECT 'Bang 5' as Rng,* From [U4:V1001] Where F1 Is Not Null UNION ALL SELECT 'Bang 6' as Rng, * From [X4:Y1001] Where F1 Is Not Null"
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
        Sheet1.Range("a4").CopyFromRecordset .Execute("TRANSFORM Sum(a.F2) SELECT a.F1 FROM (" & strSQL & ") a GROUP BY a.F1 PIVOT a.Rng")
    End With
End Sub
 
Upvote 0
Đây là ví dụ với 6 bảng bác nhé.
Mỗi lần dữ liệu sẽ làm mới toàn bộ dữ liệu
Làm bằng công thức cũng được bác ơi, nhưng nó mất nhiều thời gian và nặng nếu lưu công thức sẵn
Dữ liệu trong các bảng nhỏ của bạn mình thấy có 1 số cái trùng nhau, nên tham chiếu bằng công thức khá nặng và mất nhiều bước, mình không biết là bạn sẽ lấy cả 2 hay gộp chung lấy tổng lại.
Hiện tại mình đang sử dụng pivot, các số trùng nhau sẽ được gộp tổng số lượng lại.
Nếu dữ liệu các bảng nhỏ của bạn thay đổi thường xuyên thì bạn nên tạo định dạng bảng và đặt tên cho mỗi bảng, như vậy báo cáo tổng hợp có thể dễ dàng thêm bớt các bảng, và tự co dãn khi dữ liệu các bảng nhỏ thay đổi. Pivot thì máy chạy khá nhẹ nhàng.
Bạn có thể tham khảo file đính kèm này.
 

File đính kèm

  • Book1 rev1 (1).xlsb
    379.1 KB · Đọc: 17
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom