Cần lọc dữ liệu sang các trang tính khác theo yêu cầu (1 người xem)

  • Thread starter Thread starter vansontv
  • Ngày gửi Ngày gửi
Liên hệ QC

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

mình sử dụng được công thức của bạn rồi nhưng có chổ 3 sao Vân Hớn Thổ Tú Thái Âm nó nằm trung 1 sheet phải làm sao bạn
Trong khi đơi bạn @HieuCD ra tay thì bạn dùng tạm code này vậy. Mình không có dữ liệu 10000 dòng nên không biết code có nhanh không nửa, bạn tự test thử vậy.
 

File đính kèm

Trong khi đơi bạn @HieuCD ra tay thì bạn dùng tạm code này vậy. Mình không có dữ liệu 10000 dòng nên không biết code có nhanh không nửa, bạn tự test thử vậy.
hay vậy cho nó auto không cần nhấn cái ô màu xanh được không bạn thêm cái nửa bên sheet La Hầu Thái Bạch Kế Đô v/v cái cột E và Cột F không cần lọc qua đâu chỉ cần Tên Họ, tuổi 2 cột Nam Nữ và cột Sao là được rồi
 
chết rồi minh viết "Sao Hạng lên thiếu rồi
La Hầu

Thổ Tú

Thủy Diệu

Thái Bạch

Thái Dương

Vân Hớn

Kế Đô

Thái Âm

Mộc Đức

như vậy đó lọc 3 cái chính còn những sao còn lại vào sao hội
 
hay vậy cho nó auto không cần nhấn cái ô màu xanh được không bạn thêm cái nửa bên sheet La Hầu Thái Bạch Kế Đô v/v cái cột E và Cột F không cần lọc qua đâu chỉ cần Tên Họ, tuổi 2 cột Nam Nữ và cột Sao là được rồi
Auto cũng được bạn, nhưng bạn cứ tưởng voi thế này nhé. Giả sử bạn gõ 1 ô, sau đó nhấn Enter code sẽ duyệt qua 10000 lần để quét dữ liệu bạn và 10000 lần kiểm tra điều kiện, sau đó lọc lấy dữ liệu thỏa mãn ghi vào 4 sheet và kẻ khung luôn, thời gian tiêu tốn 15 giây (giả sử thôi nhé). Vậy gõ 1 ô và phải đợi 15 giây sau mới được phép gõ nửa bạn có kiên nhẫn làm việc với nó không? Nếu có tôi sẽ giúp.
 
không ai trách bạn gì cả! chẳng qua bạn đặt tiêu đề không cụ thể sai với nội quy diễn đàn nên phải khóa bài thôi!
bạn xem file đính kèm là cách dùng công thức nhen! hihi ^o^
Cho mình góp vui tý xíu :p
Tại sheet nhập công thức rút lại cho gọn
E5=IFERROR(CHOOSE(MOD(C5,9),"La Hầu","Thổ Tú","Thủy Diệu","Thái Bạch","Thái Dương","Văn Hớn","Kế Đô","Thái Âm","Mộc Đức"),"")
F5=IFERROR(CHOOSE(MOD(D5,9),"Kế Đô","Văn Hớn","Mộc Đức","Thái Âm","Thổ Tú","La Hầu","Thái Dương","Thái Bạch","Thủy Diệu"),"")
 

File đính kèm

Bạn @HieuCD ra tay giúp luôn phần code đi cho nó máu, tôi thấy chủ đề dưới có code sẳn rồi sửa chút cho học hỏi thêm luôn đi.
http://www.giaiphapexcel.com/diendan/threads/tách-file-danh-sách-học-sinh-theo-lớp-từ-sheet-tổng.133620/#post-845563
Code của mình rất nhiều phần là học hỏi từ bạn :)
hay vậy cho nó auto không cần nhấn cái ô màu xanh được không bạn thêm cái nửa bên sheet La Hầu Thái Bạch Kế Đô v/v cái cột E và Cột F không cần lọc qua đâu chỉ cần Tên Họ, tuổi 2 cột Nam Nữ và cột Sao là được rồi
Chạy code
Mã:
Sub TachSao()
  'Nhan 3 phím: Ctrl + Shift + T chay code
  Dim Sh As Worksheet, RngList As Range, Rng As Range, sArr As Variant, Dic As Object
  Dim i As Long, ik As Long, n As Long, lRow As Long
  Dim tmp As String
  Application.ScreenUpdating = False
 
  sArr = Array("La H?u", "Thái B?ch", "K? ?ô", "Sao H?i")
  Set Dic = CreateObject("Scripting.Dictionary")
  For i = 1 To Sheets.Count 'lay Index sheets
    For n = 0 To 3
      tmp = sArr(n)
      If Sheets(i).Name Like tmp Then Dic.Item(tmp) = i: Exit For
    Next n
  Next i
 
  Set Sh = Sheets(Dic.Item(sArr(3))) 'Sheet Sao Hoi"
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then Sh.Range("A5:G" & lRow).Clear
 
  With Sheet1
    lRow = .Range("G" & Rows.Count).End(xlUp).Row
    If lRow < 5 Then MsgBox ("Khong co du lieu, Khong Sao"): Exit Sub
    .Range("A5:G" & lRow).Copy Destination:=Sh.Range("A5")
  End With
 
  Set RngList = Sh.Range("A4:G" & lRow)
  Set Rng = Sh.Range("A5:G" & lRow)
  Rng.Value = Rng.Value
  Sh.Range("E5:F" & lRow).Value = Empty
 
  For i = 0 To 2
    ik = Dic.Item(sArr(i))
    With Sheets(ik)
      lRow = .Range("B" & Rows.Count).End(xlUp).Row
      If lRow > 4 Then .Range("A5:G" & lRow).Clear
      RngList.AutoFilter Field:=7, Criteria1:=sArr(i)
      If Rng.SpecialCells(12).Cells.Count Then
        Rng.SpecialCells(12).Copy Destination:=.Range("A5")
        Rng.EntireRow.Delete
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        .Range("A5").Value = 1
        .Range("A5:A" & lRow).DataSeries
        RngList.AutoFilter
      End If
    End With
  Next i
 
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then
    Sh.Range("A5").Value = 1
    Sh.Range("A5:A" & lRow).DataSeries
  End If
  Application.ScreenUpdating = True
End Sub
 

File đính kèm

Code của mình rất nhiều phần là học hỏi từ bạn :)

Chạy code
Mã:
Sub TachSao()
  'Nhan 3 phím: Ctrl + Shift + T chay code
  Dim Sh As Worksheet, RngList As Range, Rng As Range, sArr As Variant, Dic As Object
  Dim i As Long, ik As Long, n As Long, lRow As Long
  Dim tmp As String
  Application.ScreenUpdating = False
 
  sArr = Array("La H?u", "Thái B?ch", "K? ?ô", "Sao H?i")
  Set Dic = CreateObject("Scripting.Dictionary")
  For i = 1 To Sheets.Count 'lay Index sheets
    For n = 0 To 3
      tmp = sArr(n)
      If Sheets(i).Name Like tmp Then Dic.Item(tmp) = i: Exit For
    Next n
  Next i
 
  Set Sh = Sheets(Dic.Item(sArr(3))) 'Sheet Sao Hoi"
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then Sh.Range("A5:G" & lRow).Clear
 
  With Sheet1
    lRow = .Range("G" & Rows.Count).End(xlUp).Row
    If lRow < 5 Then MsgBox ("Khong co du lieu, Khong Sao"): Exit Sub
    .Range("A5:G" & lRow).Copy Destination:=Sh.Range("A5")
  End With
 
  Set RngList = Sh.Range("A4:G" & lRow)
  Set Rng = Sh.Range("A5:G" & lRow)
  Rng.Value = Rng.Value
  Sh.Range("E5:F" & lRow).Value = Empty
 
  For i = 0 To 2
    ik = Dic.Item(sArr(i))
    With Sheets(ik)
      lRow = .Range("B" & Rows.Count).End(xlUp).Row
      If lRow > 4 Then .Range("A5:G" & lRow).Clear
      RngList.AutoFilter Field:=7, Criteria1:=sArr(i)
      If Rng.SpecialCells(12).Cells.Count Then
        Rng.SpecialCells(12).Copy Destination:=.Range("A5")
        Rng.EntireRow.Delete
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        .Range("A5").Value = 1
        .Range("A5:A" & lRow).DataSeries
        RngList.AutoFilter
      End If
    End With
  Next i
 
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then
    Sh.Range("A5").Value = 1
    Sh.Range("A5:A" & lRow).DataSeries
  End If
  Application.ScreenUpdating = True
End Sub
po tay rồi bạn ơi ctrl + shift + T không hiện lên cái gì hết chạy code như nào vậy hay la bấm ctrl + shift + T không bấm mặt cười mình gà cái này giúp giúp người giúp cho chót luôn y bạn làm hộ mình ra bản excel hoàng chỉnh y người khi mình không ở đó mấy Sư tự làm cũng đuơcj
 
po tay rồi bạn ơi ctrl + shift + T không hiện lên cái gì hết chạy code như nào vậy hay la bấm ctrl + shift + T không bấm mặt cười mình gà cái này giúp giúp người giúp cho chót luôn y bạn làm hộ mình ra bản excel hoàng chỉnh y người khi mình không ở đó mấy Sư tự làm cũng đuơcj
ctrl + shift + T chỉ chạy được trên file của mình thôi
gởi file của bạn lên, mình sẽ làm cho chạy code
 
không đợc
ctrl + shift + T chỉ chạy được trên file của mình thôi
gởi file của bạn lên, mình sẽ làm cho chạy code
ok bạn đợi chúc thêm cái nửa nếu xoa bên sheet nhập thì những sheet kia tự xóa luôndduocuoc không ban
 

File đính kèm

bửa nay ngủ sớm rồi
 
Xóa bên sheet nhập là như thế nào? Xóa dữ liệu hay xóa cả sheet?
xóa dữ liệu thôi bạn mình nhập bên sheet nhập thì nó lọc qua mình xóa bên nhập nó cũng xóa luôn đợc ko bạn nếu không đợc thì mình xóa tay cũng được
 
xóa dữ liệu thôi bạn mình nhập bên sheet nhập thì nó lọc qua mình xóa bên nhập nó cũng xóa luôn đợc ko bạn nếu không đợc thì mình xóa tay cũng được
Lưu file với đuôi .xlsm hay .xlsb
Insert Module và chép code vào
Tìm biểu tượng Macro trong Excel, bấm biểu tượng
Chọn sub, chọn Options, nhập phím tắt vào Shortcut key, nhớ kết quả, nhấn Enter
Sheet Sao Hội không được xóa
Mã:
Sub TachSao()
  'Nhan 3 phím: Ctrl + Shift + T chay code
  Dim Sh As Worksheet, RngList As Range, Rng As Range, sArr As Variant, Dic As Object
  Dim i As Long, ik As Long, n As Long, lRow As Long
  Dim tmp As String, ShName As String
  Application.ScreenUpdating = False
  sArr = Array("La H" & ChrW(7847) & "u", "Thái B" & ChrW(7841) & "ch", "K" & ChrW(7871) & " " & ChrW(272) & "ô", "Sao H" & ChrW(7897) & "i")
 
  Set Sh = Sheets(sArr(3)) 'Sheet Sao Hoi"
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then Sh.Range("A5:G" & lRow).Clear
 
  With Sheet1
    lRow = .Range("G" & Rows.Count).End(xlUp).Row
    If lRow < 5 Then MsgBox ("Khong co du lieu, Khong Sao"): Exit Sub
    Sh.Range("A5:D" & lRow).Value = .Range("A5:D" & lRow).Value
    Sh.Range("E5:E" & lRow).Value = .Range("G5:G" & lRow).Value
    Sh.Range("A5:E" & lRow).Borders.LineStyle = 1
  End With
 
  Set RngList = Sh.Range("A4:E" & lRow)
  Set Rng = Sh.Range("A5:E" & lRow)
 
  For i = 0 To 2
    ShName = sArr(i)
    RngList.AutoFilter Field:=5, Criteria1:=ShName
    If Rng.SpecialCells(xlCellTypeLastCell).Row > 4 Then
      If TestSheet(ShName) Then
        Set ShMain = Sheets.Add(After:=Sheets(Sheets.Count))
        Sheets(Sheets.Count).Name = ShName
        Sh.Range("A1:E4").Copy Destination:=Sheets(ShName).Range("A1")
      End If
      With Sheets(ShName)
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        If lRow > 4 Then .Range("A5:E" & lRow).Clear
        Rng.SpecialCells(12).Copy Destination:=.Range("A5")
        Rng.EntireRow.Delete
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        .Range("A5").Value = 1
        .Range("A5:A" & lRow).DataSeries
      End With
        RngList.AutoFilter
    Else
      Sheets(ShName).Delete
    End If
  Next i
 
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then
    Sh.Range("A5").Value = 1
    Sh.Range("A5:A" & lRow).DataSeries
  End If
  Application.ScreenUpdating = True
End Sub
Private Function TestSheet(ShName As String) As Boolean
  On Error Resume Next
  ShName = Sheets(ShName).Name
  If Err.Number Then TestSheet = True
  On Error GoTo 0
End Function
 

File đính kèm

Lưu file với đuôi .xlsm hay .xlsb
Insert Module và chép code vào
Tìm biểu tượng Macro trong Excel, bấm biểu tượng
Chọn sub, chọn Options, nhập phím tắt vào Shortcut key, nhớ kết quả, nhấn Enter
Sheet Sao Hội không được xóa
Mã:
Sub TachSao()
  'Nhan 3 phím: Ctrl + Shift + T chay code
  Dim Sh As Worksheet, RngList As Range, Rng As Range, sArr As Variant, Dic As Object
  Dim i As Long, ik As Long, n As Long, lRow As Long
  Dim tmp As String, ShName As String
  Application.ScreenUpdating = False
  sArr = Array("La H" & ChrW(7847) & "u", "Thái B" & ChrW(7841) & "ch", "K" & ChrW(7871) & " " & ChrW(272) & "ô", "Sao H" & ChrW(7897) & "i")
 
  Set Sh = Sheets(sArr(3)) 'Sheet Sao Hoi"
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then Sh.Range("A5:G" & lRow).Clear
 
  With Sheet1
    lRow = .Range("G" & Rows.Count).End(xlUp).Row
    If lRow < 5 Then MsgBox ("Khong co du lieu, Khong Sao"): Exit Sub
    Sh.Range("A5:D" & lRow).Value = .Range("A5:D" & lRow).Value
    Sh.Range("E5:E" & lRow).Value = .Range("G5:G" & lRow).Value
    Sh.Range("A5:E" & lRow).Borders.LineStyle = 1
  End With
 
  Set RngList = Sh.Range("A4:E" & lRow)
  Set Rng = Sh.Range("A5:E" & lRow)
 
  For i = 0 To 2
    ShName = sArr(i)
    RngList.AutoFilter Field:=5, Criteria1:=ShName
    If Rng.SpecialCells(xlCellTypeLastCell).Row > 4 Then
      If TestSheet(ShName) Then
        Set ShMain = Sheets.Add(After:=Sheets(Sheets.Count))
        Sheets(Sheets.Count).Name = ShName
        Sh.Range("A1:E4").Copy Destination:=Sheets(ShName).Range("A1")
      End If
      With Sheets(ShName)
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        If lRow > 4 Then .Range("A5:E" & lRow).Clear
        Rng.SpecialCells(12).Copy Destination:=.Range("A5")
        Rng.EntireRow.Delete
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        .Range("A5").Value = 1
        .Range("A5:A" & lRow).DataSeries
      End With
        RngList.AutoFilter
    Else
      Sheets(ShName).Delete
    End If
  Next i
 
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then
    Sh.Range("A5").Value = 1
    Sh.Range("A5:A" & lRow).DataSeries
  End If
  Application.ScreenUpdating = True
End Sub
Private Function TestSheet(ShName As String) As Boolean
  On Error Resume Next
  ShName = Sheets(ShName).Name
  If Err.Number Then TestSheet = True
  On Error GoTo 0
End Function
để mình mò chứ cái Insert Module không biết cái gì nửa thanks bạn nhiều nhé :help:
 
được rồi bạn tài quá bạn cho mình hỏi thêm cái nửa thấy cái rút gọn này hay nè nhưng cái sao cuối cùng cửa E5 và F5 nó không tính E5=IFERROR(CHOOSE(MOD(C5,9),"La Hầu","Thổ Tú","Thủy Diệu","Thái Bạch","Thái Dương","Văn Hớn","Kế Đô","Thái Âm","Mộc Đức"),"")
F5=IFERROR(CHOOSE(MOD(D5,9),"Kế Đô","Văn Hớn","Mộc Đức","Thái Âm","Thổ Tú","La Hầu","Thái Dương","Thái Bạch","Thủy Diệu"),"") sao Mộc Đức và Thủy Diệu
Lưu file với đuôi .xlsm hay .xlsb
Insert Module và chép code vào
Tìm biểu tượng Macro trong Excel, bấm biểu tượng
Chọn sub, chọn Options, nhập phím tắt vào Shortcut key, nhớ kết quả, nhấn Enter
Sheet Sao Hội không được xóa
Mã:
Sub TachSao()
  'Nhan 3 phím: Ctrl + Shift + T chay code
  Dim Sh As Worksheet, RngList As Range, Rng As Range, sArr As Variant, Dic As Object
  Dim i As Long, ik As Long, n As Long, lRow As Long
  Dim tmp As String, ShName As String
  Application.ScreenUpdating = False
  sArr = Array("La H" & ChrW(7847) & "u", "Thái B" & ChrW(7841) & "ch", "K" & ChrW(7871) & " " & ChrW(272) & "ô", "Sao H" & ChrW(7897) & "i")
 
  Set Sh = Sheets(sArr(3)) 'Sheet Sao Hoi"
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then Sh.Range("A5:G" & lRow).Clear
 
  With Sheet1
    lRow = .Range("G" & Rows.Count).End(xlUp).Row
    If lRow < 5 Then MsgBox ("Khong co du lieu, Khong Sao"): Exit Sub
    Sh.Range("A5:D" & lRow).Value = .Range("A5:D" & lRow).Value
    Sh.Range("E5:E" & lRow).Value = .Range("G5:G" & lRow).Value
    Sh.Range("A5:E" & lRow).Borders.LineStyle = 1
  End With
 
  Set RngList = Sh.Range("A4:E" & lRow)
  Set Rng = Sh.Range("A5:E" & lRow)
 
  For i = 0 To 2
    ShName = sArr(i)
    RngList.AutoFilter Field:=5, Criteria1:=ShName
    If Rng.SpecialCells(xlCellTypeLastCell).Row > 4 Then
      If TestSheet(ShName) Then
        Set ShMain = Sheets.Add(After:=Sheets(Sheets.Count))
        Sheets(Sheets.Count).Name = ShName
        Sh.Range("A1:E4").Copy Destination:=Sheets(ShName).Range("A1")
      End If
      With Sheets(ShName)
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        If lRow > 4 Then .Range("A5:E" & lRow).Clear
        Rng.SpecialCells(12).Copy Destination:=.Range("A5")
        Rng.EntireRow.Delete
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        .Range("A5").Value = 1
        .Range("A5:A" & lRow).DataSeries
      End With
        RngList.AutoFilter
    Else
      Sheets(ShName).Delete
    End If
  Next i
 
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then
    Sh.Range("A5").Value = 1
    Sh.Range("A5:A" & lRow).DataSeries
  End If
  Application.ScreenUpdating = True
End Sub
Private Function TestSheet(ShName As String) As Boolean
  On Error Resume Next
  ShName = Sheets(ShName).Name
  If Err.Number Then TestSheet = True
  On Error GoTo 0
End Function
 
công thức đó làm được rồi bạn chỉ thêm cái nửa dùm mình luôn nhé là bên sheet nhập không bật caps lock nhưng khi mình lọc qua bên những sheet kia tên người viết Hoa chữ cái đầu được không bạn
Lưu file với đuôi .xlsm hay .xlsb
Insert Module và chép code vào
Tìm biểu tượng Macro trong Excel, bấm biểu tượng
Chọn sub, chọn Options, nhập phím tắt vào Shortcut key, nhớ kết quả, nhấn Enter
Sheet Sao Hội không được xóa
Mã:
Sub TachSao()
  'Nhan 3 phím: Ctrl + Shift + T chay code
  Dim Sh As Worksheet, RngList As Range, Rng As Range, sArr As Variant, Dic As Object
  Dim i As Long, ik As Long, n As Long, lRow As Long
  Dim tmp As String, ShName As String
  Application.ScreenUpdating = False
  sArr = Array("La H" & ChrW(7847) & "u", "Thái B" & ChrW(7841) & "ch", "K" & ChrW(7871) & " " & ChrW(272) & "ô", "Sao H" & ChrW(7897) & "i")
 
  Set Sh = Sheets(sArr(3)) 'Sheet Sao Hoi"
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then Sh.Range("A5:G" & lRow).Clear
 
  With Sheet1
    lRow = .Range("G" & Rows.Count).End(xlUp).Row
    If lRow < 5 Then MsgBox ("Khong co du lieu, Khong Sao"): Exit Sub
    Sh.Range("A5:D" & lRow).Value = .Range("A5:D" & lRow).Value
    Sh.Range("E5:E" & lRow).Value = .Range("G5:G" & lRow).Value
    Sh.Range("A5:E" & lRow).Borders.LineStyle = 1
  End With
 
  Set RngList = Sh.Range("A4:E" & lRow)
  Set Rng = Sh.Range("A5:E" & lRow)
 
  For i = 0 To 2
    ShName = sArr(i)
    RngList.AutoFilter Field:=5, Criteria1:=ShName
    If Rng.SpecialCells(xlCellTypeLastCell).Row > 4 Then
      If TestSheet(ShName) Then
        Set ShMain = Sheets.Add(After:=Sheets(Sheets.Count))
        Sheets(Sheets.Count).Name = ShName
        Sh.Range("A1:E4").Copy Destination:=Sheets(ShName).Range("A1")
      End If
      With Sheets(ShName)
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        If lRow > 4 Then .Range("A5:E" & lRow).Clear
        Rng.SpecialCells(12).Copy Destination:=.Range("A5")
        Rng.EntireRow.Delete
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        .Range("A5").Value = 1
        .Range("A5:A" & lRow).DataSeries
      End With
        RngList.AutoFilter
    Else
      Sheets(ShName).Delete
    End If
  Next i
 
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then
    Sh.Range("A5").Value = 1
    Sh.Range("A5:A" & lRow).DataSeries
  End If
  Application.ScreenUpdating = True
End Sub
Private Function TestSheet(ShName As String) As Boolean
  On Error Resume Next
  ShName = Sheets(ShName).Name
  If Err.Number Then TestSheet = True
  On Error GoTo 0
End Function
 
công thức đó làm được rồi bạn chỉ thêm cái nửa dùm mình luôn nhé là bên sheet nhập không bật caps lock nhưng khi mình lọc qua bên những sheet kia tên người viết Hoa chữ cái đầu được không bạn
Dùng code
Mã:
Sub TachSao()
  'Nhan 3 phím: Ctrl + Shift + T chay code
  Dim Sh As Worksheet, RngList As Range, Rng As Range
  Dim sArr As Variant, dArr As Variant
  Dim i As Long, lRow As Long
  Dim tmp As String, ShName As String
  Application.ScreenUpdating = False
  sArr = Array("La H" & ChrW(7847) & "u", "Thái B" & ChrW(7841) & "ch", "K" & ChrW(7871) & " " & ChrW(272) & "ô", "Sao H" & ChrW(7897) & "i")
 
  Set Sh = Sheets(sArr(3)) 'Sheet Sao Hoi"
  Sh.AutoFilterMode = False
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then Sh.Range("A5:G" & lRow).Clear
 
  With Sheet1
    .AutoFilterMode = False
    lRow = .Range("G" & Rows.Count).End(xlUp).Row
    If lRow < 5 Then MsgBox ("Khong co du lieu, Khong Sao"): Exit Sub
    Sh.Range("A5:D" & lRow).Value = .Range("A5:D" & lRow).Value
    Sh.Range("E5:E" & lRow).Value = .Range("G5:G" & lRow).Value
  End With
 
  Sh.Range("A5:E" & lRow).Borders.LineStyle = 1
  dArr = Sh.Range("B5:B" & lRow).Value
  For i = 1 To UBound(dArr)
    dArr(i, 1) = Application.Proper(dArr(i, 1))
  Next i
  Sh.Range("B5:B" & lRow) = dArr
  Set RngList = Sh.Range("A4:E" & lRow)
  Set Rng = Sh.Range("A5:E" & lRow)
 
  For i = 0 To 2
    ShName = sArr(i)
    RngList.AutoFilter Field:=5, Criteria1:=ShName
    If Rng.SpecialCells(xlCellTypeLastCell).Row > 4 Then
      If TestSheet(ShName) Then
        Set ShMain = Sheets.Add(After:=Sheets(Sheets.Count))
        Sheets(Sheets.Count).Name = ShName
        Sh.Range("A1:E4").Copy Destination:=Sheets(ShName).Range("A1")
      End If
      With Sheets(ShName)
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        If lRow > 4 Then .Range("A5:E" & lRow).Clear
        Rng.SpecialCells(12).Copy Destination:=.Range("A5")
        Rng.EntireRow.Delete
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        .Range("A5").Value = 1
        .Range("A5:A" & lRow).DataSeries
      End With
      RngList.AutoFilter
    Else
      Sheets(ShName).Delete
    End If
  Next i
 
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then
    Sh.Range("A5").Value = 1
    Sh.Range("A5:A" & lRow).DataSeries
  End If
  Set Sh = Nothing: Set RngList = Nothing: Set Rng = Nothing
  Application.ScreenUpdating = True
End Sub
 

File đính kèm

bạn quá giỏi rồi cầu chúc cho bạn có nhiều sức khỏe để giúp đở mọi người
Dùng code
Mã:
Sub TachSao()
  'Nhan 3 phím: Ctrl + Shift + T chay code
  Dim Sh As Worksheet, RngList As Range, Rng As Range
  Dim sArr As Variant, dArr As Variant
  Dim i As Long, lRow As Long
  Dim tmp As String, ShName As String
  Application.ScreenUpdating = False
  sArr = Array("La H" & ChrW(7847) & "u", "Thái B" & ChrW(7841) & "ch", "K" & ChrW(7871) & " " & ChrW(272) & "ô", "Sao H" & ChrW(7897) & "i")
 
  Set Sh = Sheets(sArr(3)) 'Sheet Sao Hoi"
  Sh.AutoFilterMode = False
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then Sh.Range("A5:G" & lRow).Clear
 
  With Sheet1
    .AutoFilterMode = False
    lRow = .Range("G" & Rows.Count).End(xlUp).Row
    If lRow < 5 Then MsgBox ("Khong co du lieu, Khong Sao"): Exit Sub
    Sh.Range("A5:D" & lRow).Value = .Range("A5:D" & lRow).Value
    Sh.Range("E5:E" & lRow).Value = .Range("G5:G" & lRow).Value
  End With
 
  Sh.Range("A5:E" & lRow).Borders.LineStyle = 1
  dArr = Sh.Range("B5:B" & lRow).Value
  For i = 1 To UBound(dArr)
    dArr(i, 1) = Application.Proper(dArr(i, 1))
  Next i
  Sh.Range("B5:B" & lRow) = dArr
  Set RngList = Sh.Range("A4:E" & lRow)
  Set Rng = Sh.Range("A5:E" & lRow)
 
  For i = 0 To 2
    ShName = sArr(i)
    RngList.AutoFilter Field:=5, Criteria1:=ShName
    If Rng.SpecialCells(xlCellTypeLastCell).Row > 4 Then
      If TestSheet(ShName) Then
        Set ShMain = Sheets.Add(After:=Sheets(Sheets.Count))
        Sheets(Sheets.Count).Name = ShName
        Sh.Range("A1:E4").Copy Destination:=Sheets(ShName).Range("A1")
      End If
      With Sheets(ShName)
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        If lRow > 4 Then .Range("A5:E" & lRow).Clear
        Rng.SpecialCells(12).Copy Destination:=.Range("A5")
        Rng.EntireRow.Delete
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        .Range("A5").Value = 1
        .Range("A5:A" & lRow).DataSeries
      End With
      RngList.AutoFilter
    Else
      Sheets(ShName).Delete
    End If
  Next i
 
  lRow = Sh.Range("B" & Rows.Count).End(xlUp).Row
  If lRow > 4 Then
    Sh.Range("A5").Value = 1
    Sh.Range("A5:A" & lRow).DataSeries
  End If
  Set Sh = Nothing: Set RngList = Nothing: Set Rng = Nothing
  Application.ScreenUpdating = True
End Sub
 
Web KT

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

Back
Top Bottom