Coppy dữ liệu từ nhiều File về 1 Sheet theo điều kiện

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

thanhhai30420

Thành viên mới
Tham gia
10/1/24
Bài viết
4
Được thích
0
Các bác cho em hỏi vấn đề này với ạ:
Hiện tại em đang muốn cóp bi dữ liệu theo điều kiện ID ở 2 file data 1 và data 2 về file kết quả. Ở file kết quả thì sẽ cho 1 sheet là 1 ID. Em muốn hỏi là có code VBA nào thực hiện được việc này không ạ.
Hiện tại em chỉ mở từng file lên và Filter theo ID rồi cóp bi qua thôi ạ.
Em xin cảm ơn
 

File đính kèm

  • Data 1.xlsx
    390.6 KB · Đọc: 13
  • Data 2.xlsx
    426.9 KB · Đọc: 10
  • Kết quả.xlsx
    1.8 MB · Đọc: 12
Lần chỉnh sửa cuối:
Hiện tại em đang gặp 1 vấn đề như sau:
Em muốn coppy dữ liệu theo ID từ nhiều File khác nhau về 1 sheet (Như code em để trong Module 1). Nhưng hiện tại em vẫn chưa tìm ra cách để VBA tự động chuyển sang 1 ID khác để tiếp tục chạy, vì vậy em phải coppy nhiều code rồi đổi thành 1 ID khác (Như code em để trong Module 2). Vậy các cao nhân cho em hỏi làm thế nào để code em ngắn gọn hơn và có thể chạy đủ các ID. Nếu có trường hợp thêm/bớt ID thì mình chỉ cần chỉnh sửa List ID là có thể chạy tiếp được. Em cảm ơn ạ
1/ Bạn nên thay từ "cao nhân" bằng từ nào đó phù hợp hơn.
2/ Bạn gửi File mẫu có dữ liệu lên và diễn giải cách thực hiện thủ công và kết quả mong muốn chứ đưa mấy đoạn ghi macro như thế thì chắc it ai muốn hỗ trợ bạn.
 
Upvote 0
Coppy sai chính tả nữa. Cóp bi mới đúng.
 
Upvote 0
1/ Bạn nên thay từ "cao nhân" bằng từ nào đó phù hợp hơn.
2/ Bạn gửi File mẫu có dữ liệu lên và diễn giải cách thực hiện thủ công và kết quả mong muốn chứ đưa mấy đoạn ghi macro như thế thì chắc it ai muốn hỗ trợ bạn.
Cảm ơn bác đã góp ý. Em đã chỉnh sửa lại bài viết rồi ạ
 
Upvote 0
Các bác cho em hỏi vấn đề này với ạ:
Hiện tại em đang muốn cóp bi dữ liệu theo điều kiện ID ở 2 file data 1 và data 2 về file kết quả. Ở file kết quả thì sẽ cho 1 sheet là 1 ID. Em muốn hỏi là có code VBA nào thực hiện được việc này không ạ.
Hiện tại em chỉ mở từng file lên và Filter theo ID rồi cóp bi qua thôi ạ.
Em xin cảm ơn
Bạn nên để 1 sheet Main như này. kê các ID muốn tổng hợp vào. Còn việc tổng hợp data và tạo ra sheet IDxxxx thì để code tự làm1704873326217.png
 
Upvote 0
Bạn nên để 1 sheet Main như này. kê các ID muốn tổng hợp vào. Còn việc tổng hợp data và tạo ra sheet IDxxxx thì để code tự làmView attachment 298272

Bạn nên để 1 sheet Main như này. kê các ID muốn tổng hợp vào. Còn việc tổng hợp data và tạo ra sheet IDxxxx thì để code tự làmView attachment 298272
Bác có thể cho xin File code để em tham khảo với được không ạ
Bài đã được tự động gộp:

Bạn nên để 1 sheet Main như này. kê các ID muốn tổng hợp vào. Còn việc tổng hợp data và tạo ra sheet IDxxxx thì để code tự làmView attachment 298272

Bạn nên để 1 sheet Main như này. kê các ID muốn tổng hợp vào. Còn việc tổng hợp data và tạo ra sheet IDxxxx thì để code tự làmView attachment 298272
Bác có thể cho xin File code để em tham khảo với được không ạ
Bài đã được tự động gộp:

Bài này có thể làm được, nhưng số lượng ID của bạn mà nhiều quá thì file excel sẽ quá nặng, không biết có chạy được không.
File của em tầm 20 ID á bác. Nếu được cho e xin code để em tham khảo với ạ
 
Upvote 0
Tặng bạn code cùi bắp của mình, bạn dùng thử xem có được không nhé.
 

File đính kèm

  • Kq_Data_Fix.xlsm
    1.7 MB · Đọc: 17
Upvote 0
--=0--=0--=0
nhanh thế, chả nhìn thấy gì.

Code tớ thì nó chầm chậm, nhìn chớp chớp giống như virus chạy, nhìn thấy nó sướng hơn. --=0 --=0 --=0

Mã:
Sub run()
'    TatChop
    Dim ArrID, ArrFileDuLieu, ArrFileOpen
    Dim RangeID As Range
    Dim i&, j&, SoCotGoc&
    Dim wb As Workbook
    Dim KQwb As Workbook
    Set KQwb = ThisWorkbook
    On Error GoTo Thoat
    ArrFileDuLieu = Application.GetOpenFilename(FileFilter:="(*.xlsx), *.xlsx", Title:="Chon File", MultiSelect:=True)
    For i = 1 To UBound(ArrFileDuLieu)
        Workbooks.Open ArrFileDuLieu(i)
    Next
    ReDim ArrFileOpen(UBound(ArrFileDuLieu))
    For Each wb In Application.Workbooks
        If wb.Name <> "PERSONAL.XLSB" And wb.Name <> KQwb.Name Then
            j = j + 1
            ArrFileOpen(j) = wb.Name
        End If
    Next
    For i = 1 To UBound(ArrFileOpen)
        SoCotGoc = (i - 1) * 7 + 1
        With Workbooks(ArrFileOpen(i))
            Set RangeID = .Sheets("Sheet1").Range("B2:B" & .Sheets("Sheet1").Cells.SpecialCells(xlCellTypeLastCell).Row)
            ListID = XoaTrungArrCot(RangeID)
            For j = 0 To UBound(ListID)
                If i = 1 Then
                    KQwb.Sheets.Add.Name = ListID(j)
                End If
                Set RangeFilterByID = .Sheets("Sheet1").[A1].CurrentRegion
                RangeFilterByID.AutoFilter Field:=2, Criteria1:=ListID(j)
                RangeFilterByID.SpecialCells(xlCellTypeVisible).Copy
                KQwb.Sheets("" & ListID(j)).Cells(1, SoCotGoc).PasteSpecial Paste:=xlPasteAll
                Application.CutCopyMode = False
                ActiveSheet.AutoFilterMode = False
            Next
            .Close SaveChanges:=False
        End With
    Next
    For Each sh In KQwb.Worksheets
        sh.UsedRange.Columns.AutoFit
        sh.Name = "ID " & sh.Name
    Next
Thoat:
'    BatChop
End Sub

Public Function XoaTrungArrCot(Vung As Range) As Variant()
    On Error Resume Next
    Dim ArrCot
    Dim i
    Dim Dict As Object
    Set Dict = CreateObject("Scripting.Dictionary")
    ArrCot = Vung.Value
    'ReDim ArrCot(UBound(ArrCot))
    For i = LBound(ArrCot, 1) To UBound(ArrCot, 1)
        Dict.Add ArrCot(i, 1), i
        '        Debug.Print ArrCot(i, 1), Dict(ArrCot(i, 1))
        'Tiep:
    Next
    '    ReDim ArrRes(Dict.Count - 1)
    '    For j = 0 To Dict.Count - 1
    '    ArrRes(j) = Dict.keys(i)
    'Next
    XoaTrungArrCot = Dict.keys
End Function

Public Sub TatChop()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
End Sub

Public Sub BatChop()
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub
 
Upvote 0
Web KT
Back
Top Bottom