Nhờ chỉ cách lọc dữ liệu từ excel và xuất ra nhiều file excel con khác (2 người xem)

Liên hệ QC

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

vanminh888

Thành viên mới
Tham gia
20/12/11
Bài viết
19
Được thích
0
Nhờ mọi người giúp mình lọc từng BRANCH ra các file riêng với mỗi BRANCH ứng với tên "BANGTHONGBAO_IDBRANCH_TenBRANCH". Dưới là file mẫu của mình với ít dữ liệu demo, vì dữ liệu thật hơn ngàn dòng.

Mình đã nghĩ theo phương pháp lọc sau đó copy paste vào từng file riêng rồi, nhưng mình muốn một giải pháp khác là sau khi chạy sẽ từ sinh ra các file tương ứng với tên từng file đã định trước. Rất mong mọi người giúp đỡ và cho giải pháp. Xin cảm ơn.
 

File đính kèm

Bạn check file xem đúng ý bạn chưa nhé!
 

File đính kèm

Có ai giúp mình với, mình biết excel làm được mà.
 
Cái này có rất nhiều bài, bạn tham khảo link này và sửa đổi cho phù hợp
http://www.giaiphapexcel.com/forum/...hiều-file-excel-mới-theo-điều-kiện-!&p=717132

Em làm theo các của bác được rồi. Hihi thank bác
Nhưng mà nó xuất được gần 70 file thì báo lỗi "Run error script" không thể truy cập đường dẫn trong ở C gì đó. !$@!!

Thêm 1 điều nữa là nếu mỗi file mới nó sét lại số thự tự từ 1 trở đi hết và đóng khung Table luôn thì hay biết mấy -\\/.
 
Em làm theo các của bác được rồi. Hihi thank bác
Nhưng mà nó xuất được gần 70 file thì báo lỗi "Run error script" không thể truy cập đường dẫn trong ở C gì đó. !$@!!

Thêm 1 điều nữa là nếu mỗi file mới nó sét lại số thự tự từ 1 trở đi hết và đóng khung Table luôn thì hay biết mấy -\\/.
thử kiểm tra xem sao. máy tôi chạy không bị lỗi , còn máy của bạn không biết à nha
Mã:
Option Explicit
Sub Creat_newfile()
  Dim Sh As Worksheet, SrcRng As Range, CritRng As Range, endr As Long
  Dim Item
  On Error Resume Next
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
'  .................................................
  Set SrcRng = Sheet1.Range("A5").CurrentRegion
  If SrcRng Is Nothing Then Exit Sub
  Set CritRng = Sheet1.Range("H5") 'CÓ THE SUA H5 THANH COT A,B,C....
  Set CritRng = Intersect(CritRng.EntireColumn, SrcRng.Offset(1))
   If CritRng Is Nothing Then Exit Sub
'   .....................................................................
   With SrcRng
       For Each Item In UniqueList(CritRng)
            Sheets.Add.Name = Item
            .AutoFilter CritRng.Column - SrcRng.Column + 1, Item
            .SpecialCells(12).Copy Sheets(Item).Range("A5")
            .AutoFilter
           With Sheets(Item)
            endr = Range("A6").CurrentRegion.Rows.Count - 1
            .Move After:=Sheets(Sheets.Count)
            .Range("5:5").Font.Bold = True
            .Range("5:5").HorizontalAlignment = xlCenter
            .Range("A:j").EntireColumn.AutoFit
            .Range("A6").Resize(endr, 1).Value = Evaluate("ROW(R:R)")
            .Range("A6").CurrentRegion.Borders.LineStyle = 1
           End With
       Next
      .Parent.Activate
    End With
'    ......................................
For Each Sh In ThisWorkbook.Sheets
   If Sh.Name <> "BANGTHONGTIN" Then
    Sh.Copy
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Sh.Name, 51
    ActiveWorkbook.Close
  End If
Next
'.................................................................
For Each Sh In ThisWorkbook.Sheets
    If Sh.Name <> "BANGTHONGTIN" Then Sh.Delete
  Next
'  .............................................................
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Private Function UniqueList(Range As Range)
  Dim Clls As Range
  With CreateObject("Scripting.Dictionary")
    For Each Clls In Range
      If Not IsEmpty(Clls) And Not .Exists(Clls.Value) Then .Add Clls.Value, ""
    Next Clls
    UniqueList = .Keys
  End With
End Function
 

File đính kèm

Bạn làm theo code của ai? Lỗi gì có trời mới biết...

Thích thì chạy code này xem...
Mã:
Option Explicit


Public Sub GPE()
Dim Dic As Object, Tmp As String, Arr, Pth, ShMain As Worksheet
Dim I As Long, WbMain As Workbook, Rng As Range, Sh As Worksheet, Stt As Range, K As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.SheetsInNewWorkbook = 1
Set WbMain = ThisWorkbook
Set ShMain = WbMain.Sheets("BANGTHONGTIN")
Set Rng = ShMain.Range("A1").CurrentRegion
Pth = ActiveWorkbook.Path
Arr = Rng.Value
Set Dic = CreateObject("Scripting.Dictionary")
With Dic
For I = 2 To UBound(Arr)
Tmp = Arr(I, 2)
    If Not .Exists(Tmp) Then
        .Add Tmp, ""
        With Workbooks.Add
            Set Sh = .Sheets(1)
            Sh.Name = ShMain.Name
            Rng.AutoFilter 2, Tmp
            ShMain.Range("A1", Rng).SpecialCells(12).Copy
            Sh.Range("A1").PasteSpecial xlPasteColumnWidths
            Sh.Range("A1").PasteSpecial xlPasteAll
            Rng.AutoFilter
            Set Stt = Sh.Range("A2", Sh.Range("A65000").End(3))
                K = Stt.Rows.Count
                Stt = Application.Evaluate("Row(1:" & K & ")")
                Sh.Range("A1").CurrentRegion.Borders.LineStyle = 1
                .Close True, Pth & "\BANGTHONGBAO_" & Arr(I, 8) & "_" & Tmp & ".xlsx"
        End With
    End If
Next I
End With
Set Dic = Nothing
ShMain.AutoFilterMode = False
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = 3
MsgBox "Da Tach Xong!"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Code của bác quá tuyệt vời bác ạ, hầu như đáp ứng hết yêu cầu của mình, tuy nhiên vẫn bị lỗi kia nên xuất thiếu 10 file, mình tìm hiểu nó bị ngặt khúc nào thì thấy đến cái đoạn tên "BRANCH" có dạng dấu / là bị lỗi.

VD: TT_VAB/CBA

Mình đổi tên xóa dấu / ở đoạn này thì nó chạy trơn tru đến cuối luôn. Cảm ơn bác rất nhiều. }}}}}
 
VD: TT_VAB/CBA

Mình đổi tên xóa dấu / ở đoạn này thì nó chạy trơn tru đến cuối luôn. Cảm ơn bác rất nhiều. }}}}}
Có 9 ký tự đặc biệt không được dùng để đặt tên cho tập tin. Bạn tham khảo mà tránh.
[FONT=&quot] \[/FONT]
[FONT=&quot] /[/FONT]
[FONT=&quot] :[/FONT]
[FONT=&quot] *[/FONT]
[FONT=&quot] ?[/FONT]
[FONT=&quot] "[/FONT]
[FONT=&quot] < [/FONT]
[FONT=&quot] > [/FONT]
[FONT=&quot] | [/FONT]
 
thử kiểm tra xem sao. máy tôi chạy không bị lỗi , còn máy của bạn không biết à nha
Mã:
Option Explicit
Sub Creat_newfile()
  Dim Sh As Worksheet, SrcRng As Range, CritRng As Range, endr As Long
  Dim Item
  On Error Resume Next
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
'  .................................................
  Set SrcRng = Sheet1.Range("A5").CurrentRegion
  If SrcRng Is Nothing Then Exit Sub
  Set CritRng = Sheet1.Range("H5") 'CÓ THE SUA H5 THANH COT A,B,C....
  Set CritRng = Intersect(CritRng.EntireColumn, SrcRng.Offset(1))
   If CritRng Is Nothing Then Exit Sub
'   .....................................................................
   With SrcRng
       For Each Item In UniqueList(CritRng)
            Sheets.Add.Name = Item
            .AutoFilter CritRng.Column - SrcRng.Column + 1, Item
            .SpecialCells(12).Copy Sheets(Item).Range("A5")
            .AutoFilter
           With Sheets(Item)
            endr = Range("A6").CurrentRegion.Rows.Count - 1
            .Move After:=Sheets(Sheets.Count)
            .Range("5:5").Font.Bold = True
            .Range("5:5").HorizontalAlignment = xlCenter
            .Range("A:j").EntireColumn.AutoFit
            .Range("A6").Resize(endr, 1).Value = Evaluate("ROW(R:R)")
            .Range("A6").CurrentRegion.Borders.LineStyle = 1
           End With
       Next
      .Parent.Activate
    End With
'    ......................................
For Each Sh In ThisWorkbook.Sheets
   If Sh.Name <> "BANGTHONGTIN" Then
    Sh.Copy
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Sh.Name, 51
    ActiveWorkbook.Close
  End If
Next
'.................................................................
For Each Sh In ThisWorkbook.Sheets
    If Sh.Name <> "BANGTHONGTIN" Then Sh.Delete
  Next
'  .............................................................
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Private Function UniqueList(Range As Range)
  Dim Clls As Range
  With CreateObject("Scripting.Dictionary")
    For Each Clls In Range
      If Not IsEmpty(Clls) And Not .Exists(Clls.Value) Then .Add Clls.Value, ""
    Next Clls
    UniqueList = .Keys
  End With
End Function

Code của bác cũng hay lắm, ko bị báo lỗi file nhưng khi xuất chỉ ra IDBRANCH mà ko theo BANGTHONGBAO_IDBRANCH_TenBRANCH. Cảm ơn bác nhiều. -\\/.
 
Có 9 ký tự đặc biệt không được dùng để đặt tên cho tập tin. Bạn tham khảo mà tránh.
[FONT=&amp] \[/FONT]
[FONT=&amp] /[/FONT]
[FONT=&amp] :[/FONT]
[FONT=&amp] *[/FONT]
[FONT=&amp] ?[/FONT]
[FONT=&amp] "[/FONT]
[FONT=&amp] < [/FONT]
[FONT=&amp] > [/FONT]
[FONT=&amp] | [/FONT]

Do file xuất từ database ra bác ạ. Tks bác
 
Code của bác cũng hay lắm, ko bị báo lỗi file nhưng khi xuất chỉ ra IDBRANCH mà ko theo BANGTHONGBAO_IDBRANCH_TenBRANCH. Cảm ơn bác nhiều. -\\/.
THÌ THAY ĐOẠN NÀY ActiveWorkbook.SaveAs ThisWorkbook.Path & "" & Sh.Name, 51
THÀNH
ActiveWorkbook.SaveAs ThisWorkbook.Path & "" & "BANG THONG BAO_" & Sh.Name & "_" & Sh.Range("B6"), 51
LÀ OK
Mã:
Option Explicit
Sub Creat_newfile()
  Dim Sh As Worksheet, SrcRng As Range, CritRng As Range, endr As Long
  Dim Item
  On Error Resume Next
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
'  .................................................
  Set SrcRng = Sheet1.Range("A5").CurrentRegion
  If SrcRng Is Nothing Then Exit Sub
  Set CritRng = Sheet1.Range("H5") 'CÓ THE SUA H5 THANH COT A,B,C....
  Set CritRng = Intersect(CritRng.EntireColumn, SrcRng.Offset(1))
   If CritRng Is Nothing Then Exit Sub
'   .....................................................................
   With SrcRng
       For Each Item In UniqueList(CritRng)
            Sheets.Add.Name = Item
            .AutoFilter CritRng.Column - SrcRng.Column + 1, Item
            .SpecialCells(12).Copy Sheets(Item).Range("A5")
            .AutoFilter
           With Sheets(Item)
            endr = Range("A6").CurrentRegion.Rows.Count - 1
            .Move After:=Sheets(Sheets.Count)
            .Range("5:5").Font.Bold = True
            .Range("5:5").HorizontalAlignment = xlCenter
            .Range("A:j").EntireColumn.AutoFit
            .Range("A6").Resize(endr, 1).Value = Evaluate("ROW(R:R)")
            .Range("A6").CurrentRegion.Borders.LineStyle = 1
           End With
       Next
      .Parent.Activate
    End With
'    ......................................
For Each Sh In ThisWorkbook.Sheets
   If Sh.Name <> "BANGTHONGTIN" Then
    Sh.Copy
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & "BANG THONG BAO_" & Sh.Name & "_" & Sh.Range("B6"), 51
    ActiveWorkbook.Close
  End If
Next
'.................................................................
For Each Sh In ThisWorkbook.Sheets
    If Sh.Name <> "BANGTHONGTIN" Then Sh.Delete
  Next
'  .............................................................
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Private Function UniqueList(Range As Range)
  Dim Clls As Range
  With CreateObject("Scripting.Dictionary")
    For Each Clls In Range
      If Not IsEmpty(Clls) And Not .Exists(Clls.Value) Then .Add Clls.Value, ""
    Next Clls
    UniqueList = .Keys
  End With
End Function
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom