Giúp mình tổng hợp dữ liệu theo Danh mục từ các file khác nhau ạ. (1 người xem)

  • Thread starter Thread starter ohho84
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

ohho84

Thành viên chính thức
Tham gia
11/8/11
Bài viết
94
Được thích
2
Dạ ở 2 file đính kèm là 2 file khác nhau, mỗi file gồm 2 sheet trong đó Sheet1 là em nhập các sản phẩm theo Danh mục khác nhau, còn ở Sheet 2 em muốn tổng hợp tất cả sản phẩm theo Danh mục đã được nhập vào ở Sheet1 của cả 2 file ạ. Cho em xin VBA vì Dự liệu của em nhiều và nhiều file. Mong mọi người giúp em. Em xin cảm ơn ạ.
+-+-+-++-+-+-++-+-+-+
P/s: Em quên mất, thiếu 1 điều kiện sắp xếp khi tổng hợp ạ:
Ở cột Tình trạng có nhiều loại Tình trạng nhưng có 3 cái tình trạng đặc biệt là TT1, TT2, và TT3 thì những Sản phẩm có Tình trạng là 1 trong 3 Tình trạng này phải được xếp trên những Sản phẩm khác trong Danh mục ạ.
 

File đính kèm

Lần chỉnh sửa cuối:
Em quên mất, thiếu 1 điều kiện sắp xếp khi tổng hợp ạ:
Ở cột Tình trạng có nhiều loại Tình trạng nhưng có 3 cái tình trạng đặc biệt ví dụ là TT1, TT2, và TT3 thì những Sản phẩm có Tình trạng là 1 trong 3 Tình trạng này phải được xếp trên những Sản phẩm khác trong Danh mục ạ. +-+-+-++-+-+-++-+-+-+
 
Lần chỉnh sửa cuối:
Dạ ở 2 file đính kèm là 2 file khác nhau, mỗi file gồm 2 sheet trong đó Sheet1 là em nhập các sản phẩm theo Danh mục khác nhau, còn ở Sheet 2 em muốn tổng hợp tất cả sản phẩm theo Danh mục đã được nhập vào ở Sheet1 của cả 2 file ạ. Cho em xin VBA vì Dự liệu của em nhiều và nhiều file. Mong mọi người giúp em. Em xin cảm ơn ạ.
-=.,,-=.,,-=.,,
Đóng tất cả các file, chỉ mở file Bảng A và nhấn nút Run chạy code
 

File đính kèm

Bác ơi,
Ý em là có VBA cho mỗi bảng ấy ạ. Vì mô hình của em là trong foder có nhiều file khác nhau. Tại mỗi file khi run Macro thì nó lấy và tổng hợp tất cả dữ liệu từ tất cả các Sheet 1 của tất cả các file còn lại để in ra Sheet 2 của chính file đó bác ạ.
Ví dụ có 4 file: Bảng A, Bảng B, Bảng C, Bảng D thì tại Bảng A VBA sẽ tổng hợp tất cả dữ liệu của tất cả các Sheet 1 của cả 4 bảng rồi in ra Sheet 2 của Bảng A mà không cần mở các bảng còn lại ra bác ạ

P/s: Với lại mỗi lần mở Macro mà màn hình tự bung tất cả các file còn lại thì thật sự là ko được tối ưu lắm bác ạ. Bác thử xem xem có cách nào không fix giùm em với ạ

Đóng tất cả các file, chỉ mở file Bảng A và nhấn nút Run chạy code
 
Lần chỉnh sửa cuối:
E vẫn đang hóng. Mong mọi người giúp đỡ ạ
 
Bác ơi,
Ý em là có VBA cho mỗi bảng ấy ạ. Vì mô hình của em là trong foder có nhiều file khác nhau. Tại mỗi file khi run Macro thì nó lấy và tổng hợp tất cả dữ liệu từ tất cả các Sheet 1 của tất cả các file còn lại để in ra Sheet 2 của chính file đó bác ạ.
Ví dụ có 4 file: Bảng A, Bảng B, Bảng C, Bảng D thì tại Bảng A VBA sẽ tổng hợp tất cả dữ liệu của tất cả các Sheet 1 của cả 4 bảng rồi in ra Sheet 2 của Bảng A mà không cần mở các bảng còn lại ra bác ạ

P/s: Với lại mỗi lần mở Macro mà màn hình tự bung tất cả các file còn lại thì thật sự là ko được tối ưu lắm bác ạ. Bác thử xem xem có cách nào không fix giùm em với ạ
Kiểu làm của bạn hơi lạ, bạn kiểm tra lại
Mã:
Sub GPE()
Dim i As Long, tmp As String, MainWB As Workbook, WB As Workbook, FSO As Object, FileItem As Object
Application.ScreenUpdating = False
Set MainWB = ThisWorkbook
With MainWB.Sheets(2)
    .Range("A2:I" & .Range("B65000").End(xlUp).Row).ClearContents
    Sheets(1).Range("A2:I" & Sheets(1).Range("B65000").End(xlUp).Row).Copy .Range("A2")
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each FileItem In FSO.GetFolder(ThisWorkbook.Path).Files
    If FileItem.Name <> MainWB.Name And Left(FileItem.Name, 1) <> "~" And _
            FileItem.Name <> "x.xlsx" And FileItem.Name <> "no.xlsx" Then
        Set WB = Workbooks.Open(FileItem.Path)
        With WB.Sheets(1)
            .Range("A2:I" & .Range("B65000").End(xlUp).Row).Copy _
                MainWB.Sheets(2).Range("A" & MainWB _
                .Sheets(2).Range("B65000").End(xlUp).Row + 1)
        End With
        WB.Close False
    End If
Next FileItem
Set FileItem = Nothing
Set FSO = Nothing
With MainWB.Sheets(2)
    For i = 2 To .Range("B65500").End(xlUp).Row
        If .Cells(i, 1) = "" Then .Cells(i, 1) = .Cells(i - 1, 1)
    Next
    .Range("A1:I" & .Range("B65500").End(xlUp).Row).Sort Key1:=.Range("A1"), Order1:=xlAscending, _
        Key2:=.Range("H1"), Order2:=xlAscending, Header:=xlYes, OrderCustom:=1
    For i = 2 To .Range("B65500").End(xlUp).Row
        If .Cells(i, 1) = tmp Then
            .Cells(i, 1) = ""
        Else
            tmp = .Cells(i, 1)
        End If
    Next
End With
Application.ScreenUpdating = True
End Sub
 

File đính kèm

@HieuCD: Em cảm ơn bác nhiều ạ. Em vừa đi đá bóng về chưa tắm rửa gì vào check thấy coment của bác em mừng quá. Em làm cách vậy bởi Bảng dữ liệu công ty em được chia sẻ trên Dropbox cùng nhiều người tham gia chỉnh sửa nên em làm vậy để ko ghi đè lên nhau ạ. Bác cho em hỏi thêm chút ạ :
- Khi Foder này của em nhiều Bảng hơn ví dụ thêm bảng C, Bảng D, Bảng E... thì em thay code trong VBA như thế nào để tổng hợp dữ liệu của tất cả các bảng lại với nhau ạ.

P/s: Với em hỏi thêm chút nữa là Em có 3 Macro ở 3 Sheet trong 1 file ví dụ: Sub A1(), Sub A2(), Sub A3() em muốn gán vào 1 cái buton như bác đã làm sẵn và chỉ cần click 1 cái thì Chạy lần lượt Sub A1() đến SubA2() rồi đến Sub(A3) mà ko cần phải click nhiều lần ở nhiều Sheet thì làm thế nào ạ.
 
Lần chỉnh sửa cuối:
@HieuCD: À, à, em xin lỗi. VBA của bác đã là tự động tổng hợp dữ liệu của tất cả các file rồi @$@!^%. Vậy nhờ bác chỉ giùm em thêm cái vụ Chạy lần lượt 3 macro ở 3 sheet khác nhau chỉ bằng 1 click thôi ạ
 
@HieuCD: À, à, em xin lỗi. VBA của bác đã là tự động tổng hợp dữ liệu của tất cả các file rồi @$@!^%. Vậy nhờ bác chỉ giùm em thêm cái vụ Chạy lần lượt 3 macro ở 3 sheet khác nhau chỉ bằng 1 click thôi ạ
Nếu đã có sub A1(), sub A2(), sub A3()
code chạy lần lượt 3 sub trên
Sub GPE()
...
Call A1
Call A2
Call A3
...
End Sub
 
Cảm ơn bác nhiều ạ. Em làm được rồi
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom