Lọc dữ liệu từ nhiều sheet khác nhau (12-18 sheets) vào 1 sheets tổng hợp

Liên hệ QC

akacic

Thành viên mới
Tham gia
11/3/08
Bài viết
3
Được thích
2
Xin chào cả nhà,

Hiện giờ mình có 1 vấn đề thắc mắc cần mọi nguời tư vấn cách làm như thế này:

Mình làm bên mảng thương mại - hợp đồng nên cuối năm cần tổng hợp thông tin các hợp đồng (ví dụ như tên hợp đồng, mã hợp đồng, ngày tháng ký hợp đồng, giá trị ký hợp đồng .... - mỗi trường trên ở các cột khác nhau) từ các sheet. Mỗi người làm hợp đồng có 1 sheet riêng biệt. Hiện giờ mình muốn tổng hợp các thông tin từ các sheet này vào 1 sheet tổng hợp với cấu trúc các sheet này giống nhau.

Sheet tổng hợp sẽ tự động copy và chèn thông tin từ các sheet chi tiết.

Mong mọi người giúp đỡ.

Cám ơn nhiều,
 
Xin chào cả nhà,

Hiện giờ mình có 1 vấn đề thắc mắc cần mọi nguời tư vấn cách làm như thế này:

Mình làm bên mảng thương mại - hợp đồng nên cuối năm cần tổng hợp thông tin các hợp đồng (ví dụ như tên hợp đồng, mã hợp đồng, ngày tháng ký hợp đồng, giá trị ký hợp đồng .... - mỗi trường trên ở các cột khác nhau) từ các sheet. Mỗi người làm hợp đồng có 1 sheet riêng biệt. Hiện giờ mình muốn tổng hợp các thông tin từ các sheet này vào 1 sheet tổng hợp với cấu trúc các sheet này giống nhau.

Sheet tổng hợp sẽ tự động copy và chèn thông tin từ các sheet chi tiết.

Mong mọi người giúp đỡ.

Cám ơn nhiều,
Sao bạn không đưa file demo để mọi ng còn biết mà làm chớ.
Còn nguyên lý là:
1/ Duyệt qua từng sh
2/ Copy
3/ Dán vào sh TongHop
 
Bạn ThuNghi ơi, mình có bài toán giống như vậy ở topic này ko biết bạn có thể giúp mình dc ko ? cảm ơn ban nhiều
 
hỏi cách dò dữ liệu từ nhiều sheet trả kết quả về sheet tổng hợp

Em chào mọi người!
Mọi người cho em hỏi!
Em có sheet 2012 có thông tin jobcode được sản xuất trong năm 2012 cùng size, định mức tương ứng với jobcode đó.
sheet 2013: thông tin các jobcode được sản xuất trong năm 2013 cùng size, định mức tương ứng với jobcode đó.
Sheet TH là sheet tổng hợp. Trong sheet TH có sẵn jobcode và size. Em muốn tìm năm và định mức tương ứng của jobcode có size đó, nhưng em chưa biết phải viết công thức thế nào để chỉ 1 công thức nhưng có thể dò tìm được trên cả 2 sheet 2012 và 2013 và trả kết quả về sheet TH ạ!
Mong mọi người chỉ em cách làm. Em cảm ơn ạ!
 

File đính kèm

  • GPE DO TU NHIEU SHEET.xls
    17 KB · Đọc: 382
Xin chào cả nhà,

Hiện giờ mình có 1 vấn đề thắc mắc cần mọi nguời tư vấn cách làm như thế này:

Mình làm bên mảng thương mại - hợp đồng nên cuối năm cần tổng hợp thông tin các hợp đồng (ví dụ như tên hợp đồng, mã hợp đồng, ngày tháng ký hợp đồng, giá trị ký hợp đồng .... - mỗi trường trên ở các cột khác nhau) từ các sheet. Mỗi người làm hợp đồng có 1 sheet riêng biệt. Hiện giờ mình muốn tổng hợp các thông tin từ các sheet này vào 1 sheet tổng hợp với cấu trúc các sheet này giống nhau.

Sheet tổng hợp sẽ tự động copy và chèn thông tin từ các sheet chi tiết.

Mong mọi người giúp đỡ.

Cám ơn nhiều,
Dùng thử = ADO để gộp nhé.

Mã:
Sub GopSheet_HLMT()
     Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, arr As Variant, i As Integer
       Set cn = CreateObject("ADODB.Connection")
       Set cat = CreateObject("ADOX.Catalog")
       Set tbl = CreateObject("ADOX.Table")
       Set rst = CreateObject("ADODB.Recordset")
            With cn
                 .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                     "Data Source=" & ThisWorkbook.FullName & _
                                     ";Extended Properties=""Excel 8.0;HDR=Yes;"";"
                 .Open
            End With
            cat.ActiveConnection = cn
            For Each tbl In cat.Tables
                If Right(Replace(tbl.Name, "'", ""), 1) = "$" Then str = str & Replace(Replace(tbl.Name, "$", ""), "'", "") & ";"
            Next
            arr = Split(str, ";")
            For i = 0 To UBound(arr) - 1
                Dim str1, str2 As String
                    If arr(i) <> "TONG" Then
                        str1 = str1 & " union all SELECT * from [" & arr(i) & "$]"
                        str2 = Right(str1, Len(str1) - 10)
                    End If
            Next
           With rst
                .ActiveConnection = cn
                .Open str2
           End With
           With Sheets("TONG")
                .[A2:IV65000].ClearContents
                .[A2].CopyFromRecordset rst
           End With
      rst.Close: Set rst = Nothing
      cn.Close: Set cn = Nothing
      Set cat = Nothing: Set tbl = Nothing: Erase arr
      
  End Sub
 

File đính kèm

  • Gop.xls
    47.5 KB · Đọc: 634
Code trên mình xin rút gọn lại 1 vòng lặp như sau:

Mã:
Sub GopSheet_HLMT()
     Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, str1 As String
       Set cn = CreateObject("ADODB.Connection")
       Set cat = CreateObject("ADOX.Catalog")
       Set tbl = CreateObject("ADOX.Table")
       Set rst = CreateObject("ADODB.Recordset")
            With cn
                 .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                     "Data Source=" & ThisWorkbook.FullName & _
                                     ";Extended Properties=""Excel 8.0;HDR=Yes;"";"
                 .Open
            End With
            cat.ActiveConnection = cn
            For Each tbl In cat.Tables
                If Right(Replace(tbl.Name, "'", ""), 1) = "$" And Left(tbl.Name, 4) <> "TONG" Then
                    str = str & " union all SELECT * from [" & Replace(Replace(tbl.Name, "$", ""), "'", "") & "$] "
                    str1 = Right(str, Len(str) - 10)
                End If
            Next
            
            With rst
                .ActiveConnection = cn
                .Open str1
           End With
           With Sheets("TONG")
                .[A2:IV65000].ClearContents
                .[A2].CopyFromRecordset rst
           End With
      rst.Close: Set rst = Nothing
      cn.Close: Set cn = Nothing
      Set cat = Nothing: Set tbl = Nothing
      
  End Sub
 
Xin chào các bác

Em cũng có vấn đề gần giống chủ topic:

Mỗi đợt tuyển dụng em nhận được rất nhiều file CV.xls của các ứng viên theo mẫu bắt buộc của cty. Em muốn lọc hết dữ liệu (về tên tuổi, ngày sinh, email, điện thoại, bằng cấp) từ các CV này (vài chục - hơn 100 file) ra 1 file excel tổng hợp khác. Em search help, google (chắc ko dùng đúng từ khóa) nhưng không tìm đc gì.
Các bác giúp em với ạ, em nghĩ đã có mail merge thì cũng có cách làm ngược lại chứ. Công ty em không dùng phần mềm nhân sự, chỉ có em ngồi kỳ cạch copy paste thôi, em cũng ko biết gì về macro cả.

Em cảm ơn các bác nhiều.

(theo góp ý của bác quanghai1969 em gửi kèm đây mấy file CV đơn giản (là file tên ứng viên), em muốn lọc thông tin ở các file này sang file Danh sách tổng hợp)
 

File đính kèm

  • Danhsach.rar
    13.7 KB · Đọc: 239
Lần chỉnh sửa cuối:
Xin chào các bác

Em cũng có vấn đề gần giống chủ topic:

Mỗi đợt tuyển dụng em nhận được rất nhiều file CV.xls của các ứng viên theo mẫu bắt buộc của cty. Em muốn lọc hết dữ liệu (về tên tuổi, ngày sinh, email, điện thoại, bằng cấp) ra 1 file excel tổng hợp khác. Em search help, google (chắc ko dùng đúng từ khóa) nhưng không tìm đc gì.
Các bác giúp em với ạ, em nghĩ đã có mail merge thì cũng có cách làm ngược lại chứ. Công ty em không dùng phần mềm nhân sự, chỉ có em ngồi kỳ cạch copy paste thôi, em cũng ko biết gì về macro cả.

Em cảm ơn các bác nhiều.
Nếu là tôi là bạn thì tôi sẽ gởi lên diễn đàn 2 cái CV mẫu và 1 form muốn tổng hợp và cho dữ liệu tạm vào khi copy thủ công
 
Xin chào các bác

Em cũng có vấn đề gần giống chủ topic:

Mỗi đợt tuyển dụng em nhận được rất nhiều file CV.xls của các ứng viên theo mẫu bắt buộc của cty. Em muốn lọc hết dữ liệu (về tên tuổi, ngày sinh, email, điện thoại, bằng cấp) từ các CV này (vài chục - hơn 100 file) ra 1 file excel tổng hợp khác. Em search help, google (chắc ko dùng đúng từ khóa) nhưng không tìm đc gì.
Các bác giúp em với ạ, em nghĩ đã có mail merge thì cũng có cách làm ngược lại chứ. Công ty em không dùng phần mềm nhân sự, chỉ có em ngồi kỳ cạch copy paste thôi, em cũng ko biết gì về macro cả.

Em cảm ơn các bác nhiều.

(theo góp ý của bác quanghai1969 em gửi kèm đây mấy file CV đơn giản (là file tên ứng viên), em muốn lọc thông tin ở các file này sang file Danh sách tổng hợp)
Bạn xem file đính kèm coi đúng ý chưa nhé.
 

File đính kèm

  • Danh sach tong hop.xls
    47 KB · Đọc: 692
Bạn xem file đính kèm coi đúng ý chưa nhé.

Em cảm ơn bác Hai Lúa, nhưng em dl về & không hiểu gì cả hic :( (em bấm vào cái nút vàng chữ đỏ Tổng hợp thì báo lỗi cannot run the macro, em cũng không biết link với các file dữ liệu gốc ra sao, trường hợp có nhiều file dữ liệu gốc & trong đó chứa nhiều thông tin hơn thì phải làm thế nào ạ?)
trình excel em chỉ làng nhàng thôi, em không hiểu gì về macro, nếu có thể (các) bác làm ơn giải thích giúp em làm thế nào sử dụng được file của bác Hai Lúa với, hoặc có cách nào khác bớt phức tạp hơn để gà mờ như em có thể ứng dụng được?
 
Em cảm ơn bác Hai Lúa, nhưng em dl về & không hiểu gì cả hic :( (em bấm vào cái nút vàng chữ đỏ Tổng hợp thì báo lỗi cannot run the macro, em cũng không biết link với các file dữ liệu gốc ra sao, trường hợp có nhiều file dữ liệu gốc & trong đó chứa nhiều thông tin hơn thì phải làm thế nào ạ?)
trình excel em chỉ làng nhàng thôi, em không hiểu gì về macro, nếu có thể (các) bác làm ơn giải thích giúp em làm thế nào sử dụng được file của bác Hai Lúa với, hoặc có cách nào khác bớt phức tạp hơn để gà mờ như em có thể ứng dụng được?

Bạn gửi ví dụ có bao nhiêu đó thì mình làm bao nhiêu đó, để chạy được macro bạn phải làm như sau:


Lưu ý nó sẽ tự động dò tất cả file có trong 1 folder và copy và dán vào file bạn cần.
 
Bác Hai lúa làm ơn chỉ dùm mình cách sửa code chỗ nào để sheet TONGHOP lấy dữ liệu từ các sheet kia từ dòng thứ 4 chẳng hạn. Cám ơn rất nhiều
 
Bác Hai lúa làm ơn chỉ dùm mình cách sửa code chỗ nào để sheet TONGHOP lấy dữ liệu từ các sheet kia từ dòng thứ 4 chẳng hạn. Cám ơn rất nhiều
Bạn chỉnh lại như sau là được.
[GPECODE=sql]

Sub GopSheet_HLMT()
Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, str1 As String
Set cn = CreateObject("ADODB.Connection")
Set cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
Set rst = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
.Open
End With
cat.ActiveConnection = cn
For Each tbl In cat.Tables
If Right(Replace(tbl.Name, "'", ""), 1) = "$" And Left(tbl.Name, 4) <> "TONG" Then
str = str & " union all SELECT * from [" & Replace(Replace(tbl.Name, "$", ""), "'", "") & "$A4:IV65000] " & _
"where f1 is not null"
str1 = Right(str, Len(str) - 10)
End If
Next

With rst
.ActiveConnection = cn
.Open str1
End With
With Sheets("TONG")
.[A2:IV65000].ClearContents
.[A2].CopyFromRecordset rst
End With
rst.Close: Set rst = Nothing
cn.Close: Set cn = Nothing
Set cat = Nothing: Set tbl = Nothing

End Sub

[/GPECODE]
 

File đính kèm

  • Copy of Gop.xls
    60.5 KB · Đọc: 223
Dùng thử = ADO để gộp nhé.

Mã:
Sub GopSheet_HLMT()

Em rất thích file #5 vì nó ứng dụng trong công việc của em, nhưng em muốn thêm điều kiện như sau:
Trong file hiện đang có 5 Sheet dữ liệu và 1 Sheet Tổng hợp
Điều kiện:
- Nếu ô H2 trong Sheet Tổng hợp có điều kiện là HLMT3 thì chỉ nhặt những dòng thỏa điều kiện của H2 trên cột C trong Sheet1 sang Sheet Tổng hợp.
- Nếu ô H3 trong Sheet Tổng hợp có điều kiện là HLMT4 thì chỉ nhặt những dòng thỏa điều kiện của H3 trên cột C trong Sheet1 (2) sang Sheet Tổng hợp.
- Nếu H4 trong Sheet Tổng hợp có điều kiện là HLMT3 thì chỉ nhặt những dòng thỏa điều kiện của H4 trong Sheet1 (3) sang Sheet Tổng hợp.
- Tương tự như vậy cho H5 điệu kiện của Sheet1 (4), H6 điều kiện của Sheet1 (5), H7 điều kiện của Sheet1 (6).
Giả sử trong Sheet1 có 1 hay 2 hay 3 hay nhiều hơn các dòng thỏa điều kiện H2 trong Sheet Tổng hợp thì nhặt hết.
Nói nôm na là kiểu trích lọc thỏa điều kiện trong ô. Vậy cần sửa code như thế nào. A/c nào sửa cho em với.
* Nếu như quá phức tạp thì chỉ cần nhặt những dòng thỏa điều kiện trong ô H2 của Sheet Tổng hợp trên tất cả các Sheet dữ liệu. Tức là trên tất cả các Sheet cứ thỏa điều kiện H2 (Tổng hợp) là nhặt sang.
Xin cảm ơn ạ.
 
Chào các A/C/E diễn đàn!
Giúp mình code thực hiện lệnh:
File Excel có 20 sheet cấu trúc như nhau (1A,1B,1C,....,5C,5D) mỗi lớp có thể có HS ở <=8 thôn (tùy lớp) và các sheet tổng hợp từng thôn (Kiều La, Văn quan, ...) cấu trúc cũng giống nhau. Nhờ mọi người viết code và tạo nút lệnh ở các sheet từng thôn này để khi nhấn nút lệnh tại sheet của thôn nào thì lọc toàn bộ các HS có ở thôn đó (bắt đầu từ 1A, 1B, ...,5C,5D) vào sheet thôn. trước giờ mình chỉ lọc và copy paste nên rất lâu. Có thể thay các sheet thôn bằng một sheet Tonghop và trên nút lệnh đó cho phép chọn lọc theo thôn nào được kết quả thôn đó cũng tốt. Cảm ơn cả nhà rất nhiều!
 

File đính kèm

  • Danh sach HS 15-16.xls
    861.5 KB · Đọc: 57
Chào các A/C/E diễn đàn!
Giúp mình code thực hiện lệnh:
File Excel có 20 sheet cấu trúc như nhau (1A,1B,1C,....,5C,5D) mỗi lớp có thể có HS ở <=8 thôn (tùy lớp) và các sheet tổng hợp từng thôn (Kiều La, Văn quan, ...) cấu trúc cũng giống nhau. Nhờ mọi người viết code và tạo nút lệnh ở các sheet từng thôn này để khi nhấn nút lệnh tại sheet của thôn nào thì lọc toàn bộ các HS có ở thôn đó (bắt đầu từ 1A, 1B, ...,5C,5D) vào sheet thôn. trước giờ mình chỉ lọc và copy paste nên rất lâu. Có thể thay các sheet thôn bằng một sheet Tonghop và trên nút lệnh đó cho phép chọn lọc theo thôn nào được kết quả thôn đó cũng tốt. Cảm ơn cả nhà rất nhiều!

Bạn xem file. Thay đổi tên thôn tại Cell P1 Sheet TH để chạy code.
 

File đính kèm

  • Danh sach HS 15-16.rar
    78.9 KB · Đọc: 277
Bạn xem file. Thay đổi tên thôn tại Cell P1 Sheet TH để chạy code.
Tình hình là nhờ các AE giúp đỡ (nhất là bạn hpkhuong càng tốt vì chính bạn đã giúp tôi vấn đề này):
Trong file đính kèm của bạn hpkhuong đã làm ở #16 đã được nhưng nay phát sinh thêm một yêu cầu mới: Tại ô P1 của sheet "TH" đã có tên các thôn để lọc. Giờ tôi muốn thêm lựa chọn TẤT CẢ để lọc toàn bộ HS từ các Sheet vào sheet "TH" này và theo thứ tự hết thôn KIỀU LA đến thôn VĂN QUAN... trong vùng loạc được các thôn lại theo thứ tự từ !A,1B.... 5C,5D. mong các bạn sửa giúp code. Trân trọng cám ơn!
 
Rất mong các bạn giúp đỡ!
 
Lần chỉnh sửa cuối:
Mong sự giúp đỡ của ACE!
 
Tình hình là nhờ các AE giúp đỡ (nhất là bạn hpkhuong càng tốt vì chính bạn đã giúp tôi vấn đề này):
Trong file đính kèm của bạn hpkhuong đã làm ở #16 đã được nhưng nay phát sinh thêm một yêu cầu mới: Tại ô P1 của sheet "TH" đã có tên các thôn để lọc. Giờ tôi muốn thêm lựa chọn TẤT CẢ để lọc toàn bộ HS từ các Sheet vào sheet "TH" này và theo thứ tự hết thôn KIỀU LA đến thôn VĂN QUAN... trong vùng loạc được các thôn lại theo thứ tự từ !A,1B.... 5C,5D. mong các bạn sửa giúp code. Trân trọng cám ơn!
Mình mượn code #16 của bác hpkhuong nhé. Bạn sử dụng thế này xem sao.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DL, Ws As Worksheet, Kq(1 To 65000, 1 To 14)
Dim r As Long, I As Long, Dk As String, J As Long, h As Long
Dk = UCase(Sheets("TH").Range("P1").Value)
If Target.Address = "$P$1" Then
If Dk = UCase(Sheets("TH").Range("P13").Value) Then
For h = 5 To 13
Dk = UCase(Sheets("TH").Range("P" & h).Value)
For Each Ws In Worksheets
    If Ws.Name <> "TH" Then
    DL = Ws.Range(Ws.[A4], Ws.[A65000].End(3)).Resize(, 14)
        For r = 2 To UBound(DL)
            If UCase(DL(r, 11)) = Dk And Dk <> emtpy Then
                I = I + 1
                Kq(I, 1) = I
                For J = 2 To UBound(DL, 2)
                    Kq(I, J) = DL(r, J)
                Next J
                    Kq(I, 14) = Ws.Name
            End If
        Next r
    End If
Next Ws
Next h
Else
For Each Ws In Worksheets
    If Ws.Name <> "TH" Then
    DL = Ws.Range(Ws.[A4], Ws.[A65000].End(3)).Resize(, 14)
        For r = 2 To UBound(DL)
            If UCase(DL(r, 11)) = Dk And Dk <> emtpy Then
                I = I + 1
                Kq(I, 1) = I
                For J = 2 To UBound(DL, 2)
                    Kq(I, J) = DL(r, J)
                Next J
                    Kq(I, 14) = Ws.Name
            End If
        Next r
      End If
Next Ws
End If
    Sheets("TH").Range("A5:N65000").ClearContents
    If I Then Sheets("TH").Range("A5").Resize(I, 14) = Kq
End If
End Sub
 
Web KT
Back
Top Bottom