Cần tìm giải pháp cho việc gộp dữ liệu

Liên hệ QC

quangdungvn

Thành viên mới
Tham gia
25/9/10
Bài viết
11
Được thích
0
Mình có một file dữ liệu demo, các bạn cho mình hỏi ngoài giải pháp copy và paste còn có giải pháp nào khác để gộp dữ liệu từ nhiều sheet khác nhau thành một sheet tổng hợp như mình làm mẫu trong file demo không ?
Xin cảm ơn.
 

File đính kèm

Mình có một file dữ liệu demo, các bạn cho mình hỏi ngoài giải pháp copy và paste còn có giải pháp nào khác để gộp dữ liệu từ nhiều sheet khác nhau thành một sheet tổng hợp như mình làm mẫu trong file demo không ?
Xin cảm ơn.
Bạn đưa File có dữ liệu nhiều hơn 1 chút đi. Ít dữ liệu quá sợ làm xong lại phải sửa code mệt lắm!
---------------------------------------
Danh sách họ tên ở các sheet1,2,3 giống nhau hết và giống bên sheet "TH" luôn hả bạn?
 
Lần chỉnh sửa cuối:
Mình mới thêm ít dòng nữa rồi đó bạn, bạn có giải pháp nào xin chỉ giáo.
Xin cám ơn.
 

File đính kèm

Bất kỳ cách nào có thể ngoài việc copy và paste bằng tay, với dữ liệu nhiều dòng không thể nào ngồi copy, paste được.
 
Bất kỳ cách nào có thể ngoài việc copy và paste bằng tay, với dữ liệu nhiều dòng không thể nào ngồi copy, paste được.

1/ Dữ liệu không được Merge Cells.
2/ Tên người không có mã duy nhất, nên phải giống nhau "tuyệt đối", sai dấu cách hay chữ Hoa, thường cũng coi như 2 người khác nhau.
3/ Tên công việc cũng phải giống nhau tuyệt đối, khác 1 chút thôi thì coi như công việc khác.
4/ Các sheet con <>"TH" không có công việc thì nhập tên làm gì?
Nếu đồng ý với các điều kiện 1,2,3 thì xem file này.
Điều kiện 4 có thể tùy ý để hoặc xóa những tên không có công việc.
--Click vào hình--
 

File đính kèm

Chân thành cảm ơn bác @Ba Tê rất nhiều.
 
Chân thành cảm ơn bác @Ba Tê rất nhiều.
Mã:
Sub GPE01(WS As Worksheet, Arr(), ByRef K As Long, Dic As Object)
Dim I As Long, J As Long, Tem As String
Dim Rng As Range
   
    Set Rng = WS.Range("A2:B" & WS.Range("A65536").End(xlUp).Row)
          
          For I = 1 To 20
             If Rng(I, 2) <> Empty Then
                   Tem = Rng(I, 1) & Rng(I, 2)
                   If Not Dic.Exists(Tem) Then
                           K = K + 1
                           Dic.Add Tem, K
                             Arr(K, 1) = Rng(I, 1)
                             Arr(K, 2) = Rng(I, 2)
                    End If
                End If
     Next I
End Sub

Mã:
Sub GPE02()
Dim Arr()
Dim K As Long
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
ReDim Arr(1 To 100, 1 To 2)
    Call GPE01(Sheet1, Arr, K, Dic)
    Call GPE01(Sheet2, Arr, K, Dic)
    Call GPE01(Sheet3, Arr, K, Dic)
    Sheet4.Range("K2").Resize(K, 2).Value = Arr
End Sub

Rảnh rỗi nên code kiết chơi, bạn có thể tạo một cái khuôn sẳn, ở đây tôi tạo cho bạn 1 cái sub lấy dữ liệu của 1 sheet, nếu bạn muốn lấy dữ liệu sheet nào thì bạn chỉ call nó ra mà thôi. Bạn có thể sử dụng vòng lập duyệt qua tất cả các sheet để call ra
Call GPE01(Sheet1, Arr, K, Dic)
Call GPE01(Sheet2, Arr, K, Dic)
Call GPE01(Sheet3, Arr, K, Dic)

ở đây tôi Call 3 lần, bạn có thể sử dụng vòng lặp để Call 1 lần.
Code này tôi viết chơi thôi, nên có nhiều chỗ bạn phải thay đổi cho hợp lý chẳng hạn chỗ này ReDim Arr(1 To 100, 1 To 2)
cũng như anh Bate nói, nếu đã sử dụng DIC thì nên gõ giống nhau, có thể cho phép khác nhau về chữ hoa chữ thường.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom