Tách từ file tổng hợp, ở sheet 1(2) theo cột Ghi chu 2 ra các file chi tiết tương ứng

Liên hệ QC

Excel my love_1

Thành viên thường trực
Tham gia
12/11/19
Bài viết
321
Được thích
179
Em chào cả nhà ạ!
Em có 1 file tổng hợp , ở sheet 1 (2), cột ghi chu 2 có tên của các Đơn vị.
Em cần tách thành các file chi tiết theo tên từng Đơn vị. Như sau:
Untitled11.png
Cách thức lấy dữ liệu để tách là dựa vào cột Ghi chu 2 ở Sheet 1 (2) của file tổng hợp. Như sau:
Untitled1.png
Kết quả file chi tiết như sau:

Untitled2.png
Chi tiết trong file gửi kèm.
Rất mong các anh chị giúp đỡ ạ!
 

File đính kèm

  • Untitled2.png
    Untitled2.png
    158.5 KB · Đọc: 23
  • Tach file cac Nha sach.rar
    48.9 KB · Đọc: 2
Lần chỉnh sửa cuối:
Chỉ mỗi 1 đơn vị mà thêm dòng Grand Total để làm chi vậy bạn?
 
Upvote 0
Rất mong bạn giúp đỡ
Mã:
Option Explicit
Sub ABC()
    Dim Dic As Object, Vung As Range, wbMoi As Workbook
    Dim Arr, n&, iRow&, i&, S
    Dim sFolder$, TenFile$
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Dic = CreateObject("Scripting.Dictionary")
sFolder = ThisWorkbook.Path & "\"
TenFile = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5)
With ThisWorkbook.Sheets("Sheet1 (2)")
    If .AutoFilterMode = True Then .AutoFilterMode = False
    iRow = .Range("H" & Rows.Count).End(xlUp).Row
    Set Vung = .Range("A1:H" & iRow)
    Arr = .Range("H2:H" & iRow).Value
    For i = 1 To UBound(Arr, 1)
        If Not Arr(i, 1) Like "*Total" Then
            If Dic.exists(Arr(i, 1)) = False Then
                Dic.Add (Arr(i, 1)), ""
            End If
        End If
    Next
End With
For Each S In Dic.keys
    Set wbMoi = Workbooks.Add(1)
    wbMoi.Sheets(1).Name = S
    Vung.AutoFilter 8, S
    Vung.Copy wbMoi.Sheets(1).Range("A1")
    wbMoi.SaveAs sFolder & TenFile & "-" & S, xlOpenXMLWorkbook
    wbMoi.Close True
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "Ða tach File xong", , "THÔNG BÁO"
End Sub
Thử code này coi đúng ý bạn không?
 
Upvote 0
Mã:
Option Explicit
Sub ABC()
    Dim Dic As Object, Vung As Range, wbMoi As Workbook
    Dim Arr, n&, iRow&, i&, S
    Dim sFolder$, TenFile$
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Dic = CreateObject("Scripting.Dictionary")
sFolder = ThisWorkbook.Path & "\"
TenFile = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5)
With ThisWorkbook.Sheets("Sheet1 (2)")
    If .AutoFilterMode = True Then .AutoFilterMode = False
    iRow = .Range("H" & Rows.Count).End(xlUp).Row
    Set Vung = .Range("A1:H" & iRow)
    Arr = .Range("H2:H" & iRow).Value
    For i = 1 To UBound(Arr, 1)
        If Not Arr(i, 1) Like "*Total" Then
            If Dic.exists(Arr(i, 1)) = False Then
                Dic.Add (Arr(i, 1)), ""
            End If
        End If
    Next
End With
For Each S In Dic.keys
    Set wbMoi = Workbooks.Add(1)
    wbMoi.Sheets(1).Name = S
    Vung.AutoFilter 8, S
    Vung.Copy wbMoi.Sheets(1).Range("A1")
    wbMoi.SaveAs sFolder & TenFile & "-" & S, xlOpenXMLWorkbook
    wbMoi.Close True
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "Ða tach File xong", , "THÔNG BÁO"
End Sub
Thử code này coi đúng ý bạn không?
Tuyệt vời bạn ơi! Code ra đúng đến 96,69% ý của mình rồi. Chỉ còn cái dòng Total ở các file chi tiết , mong bạn thương thì thương cho trót, giúp mình sửa code sao cho để cái dòng Total đó nó theo tên đơn vị (như mình ví dụ này)
Untitled5.png
Mình gửi kèm file đã chèn code của bạn để bạn tiện xử lý.
Cảm ơn bạn nhiều nhiều
 

File đính kèm

  • 368-quang trung-20102021.xlsb
    17 KB · Đọc: 2
  • Untitled3.png
    Untitled3.png
    281.7 KB · Đọc: 6
Upvote 0
Bạn có thể chờ xem ai đó giúp hay không. Còn không thì để mai. Mình sẽ code nốt cho
 
Upvote 0
Mã:
Option Explicit
Sub ABC()
    Dim Dic As Object, Vung As Range, wbMoi As Workbook
    Dim Arr, n&, iRow&, i&, S
    Dim sFolder$, TenFile$
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Dic = CreateObject("Scripting.Dictionary")
sFolder = ThisWorkbook.Path & "\"
TenFile = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5)
With ThisWorkbook.Sheets("Sheet1 (2)")
    If .AutoFilterMode = True Then .AutoFilterMode = False
    iRow = .Range("H" & Rows.Count).End(xlUp).Row
    Set Vung = .Range("A1:H" & iRow)
    Arr = .Range("H2:H" & iRow).Value
    For i = 1 To UBound(Arr, 1)
        If Not Arr(i, 1) Like "*Total" Then
            If Dic.exists(Arr(i, 1)) = False Then
                Dic.Add (Arr(i, 1)), ""
            End If
        End If
    Next
End With
For Each S In Dic.keys
    Set wbMoi = Workbooks.Add(1)
    wbMoi.Sheets(1).Name = S
    Vung.AutoFilter 8, S
    Vung.Copy wbMoi.Sheets(1).Range("A1")
    wbMoi.SaveAs sFolder & TenFile & "-" & S, xlOpenXMLWorkbook
    wbMoi.Close True
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "Ða tach File xong", , "THÔNG BÁO"
End Sub
Thử code này coi đúng ý bạn không?
Không dùng dic thì gọn code hơn nhỉ?
 
Upvote 0
Chỉnh hộ bạn Thuận một chút.
Cảm ơn anh Hoàng Tuấn 868, code ra đúng ý 100% rồi ạ
Mọi người hỗ trợ nhiệt tình, em rất vui
Chúc cả nhà sức khỏe dồi dào và nhiều niềm vui
Bài đã được tự động gộp:

Không dùng dic thì gọn code hơn nhỉ?
Rất mong học hỏi thêm từ Maika8008.
Trước mình thấy Maika8008 giải dạng bài này siêu lắm (link gửi kèm), mà không tài nào học được code của bạn,mình mót code của bạn rồi sửa tới sửa lui mà ra tùm lum không à.
https://www.giaiphapexcel.com/diendan/threads/xuất-dữ-liệu-từ-1-file-excel-tổng-ra-nhiều-file-excel-con.150300/
 

File đính kèm

  • 368-quang trung-20102021.xlsb
    17.1 KB · Đọc: 0
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom