---Anh bấm Alt + F11 sẽ thấy ngay mà ---> Hàm ấy nằm ngay dưới code trên
Nếu được, hướng dẫn giúp anh hàm UniqueList.
Cám ơn.
---Anh bấm Alt + F11 sẽ thấy ngay mà ---> Hàm ấy nằm ngay dưới code trên
Anh có thể xem em ứng dụng UniqueList trong bài này như thế nào nhé:---
Nếu được, hướng dẫn giúp anh hàm UniqueList.
Cám ơn.
Để thuận tiện cho bạn tùy ý chọn vùng dử liệu và cột điều kiện trích lọc, tôi sửa lại, dùng InputBox cho bạn chọn nhé:Bác ndu96081631 ơi! e muốn làm như file test của bác nhưng cột để tách ra của em không phải ở cuối cùng mà là cột thứ 4 thì e phải sửa ở đâu trong code hả bác.
Sub Loc()
Dim Sh As Worksheet, DelSh As Worksheet, Item, SrcRng As Range, CriteriaRng As Range
Application.DisplayAlerts = False
On Error Resume Next
Set SrcRng = Application.InputBox("Chon vung du lieu", Type:=8)
If SrcRng Is Nothing Then Exit Sub
Set CriteriaRng = Application.InputBox("Chon cot du lieu ma ban can trich", Type:=8)
Set CriteriaRng = Intersect(CriteriaRng.EntireColumn, SrcRng, SrcRng.Offset(1))
If CriteriaRng Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set Sh = Sheets("DS toan truong")
For Each DelSh In ThisWorkbook.Worksheets
If DelSh.Name <> Sh.Name Then DelSh.Delete
Next
With SrcRng
For Each Item In UniqueList(CriteriaRng)
Sheets.Add.Name = Item
.AutoFilter 23, Item
.SpecialCells(12).Copy: Sheets(Item).Range("A1").PasteSpecial 3
.AutoFilter
With Sheets(Item)
.Move After:=Sheets(Sheets.Count)
.Range("1:1").Font.Bold = True
.Range("1:1").HorizontalAlignment = xlCenter
.Range("A:W").EntireColumn.AutoFit
.Range("C2:C1000").NumberFormat = "dd/mm/yyyy"
.Range(.Range("A2"), .Range("A65536").End(xlUp)).Value = Evaluate("ROW(R:R)")
End With
Next
.Parent.Activate
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
---...đã làm vì 1 file bao giờ cũng có sheet tổng hợp, nếu dùng cách sau thì soá mất sheet đó còn gì.
Hình như em hơi hiểu ý của tác giả:---
Tôi theo các bài của Ndu rất kỹ, các bài của Ndu càng về sau càng hoàn thiện và dễ xử dụng, bạn nói rõ xem bài nào thì xóa mất sheet tổng hợp, phân tích dữ liệu mà ảnh hưởng (chứ đừng nói đến xóa dữ liệu) thì phân tích làm gì hả bạn?
---
To: HNB, không thấy file đính kèm thì các bạn không giúp bạn được đâu. Thân chào
---
Tôi theo các bài của Ndu rất kỹ, các bài của Ndu càng về sau càng hoàn thiện và dễ xử dụng, bạn nói rõ xem bài nào thì xóa mất sheet tổng hợp, phân tích dữ liệu mà ảnh hưởng (chứ đừng nói đến xóa dữ liệu) thì phân tích làm gì hả bạn?
---
To: HNB, không thấy file đính kèm thì các bạn không giúp bạn được đâu. Thân chào
---
To: NDU, anh đang không hiểu cách xử dụng hàm InStr, chú giúp anh xem bài nói về hàm này ở đâu
---Dear Bac Tam8678,
Tôi có đính kèm file mà sao nó ko post được lên nhỉ.
Tôi đã vào file đính kèm / upload file from your computer, chọn file và nhấn nút Thêm file.
Còn cách nào không bác.
Cám ơn bác tam8678 nhiều nhiều nhé.
Rgds,
HNB
---Cái này cũng hợp lý ---> Thêm tí code nữa là xong! Nguyên tắc: Đầu tiên trước khi chạy code là xóa tất tần tần hết các sheet!
Vậy thì code sẽ thế này:
Đương nhiên trường hợp này ta không cần kiểm tra sự tồn tại của sheet ---> vì thật chất chẳng có sheet nào tồn tại, nó bị xóa hết còn đâu ---> Như thế thì cứ Add sheeet (mà không cần kiểm tra)PHP:Sub Loc() Dim Sh As Worksheet, DelSh As Worksheet, Item Application.ScreenUpdating = False Application.DisplayAlerts = False On Error Resume Next Set Sh = Sheets("DS toan truong") For Each DelSh In ThisWorkbook.Worksheets If DelSh.Name <> Sh.Name Then DelSh.Delete Next With Sh.Range(Sh.[A7], Sh.[W65536].End(xlUp)) For Each Item In UniqueList(.Offset(1, 22).Resize(, 1)) Sheets.Add.Name = Item .AutoFilter 23, Item .SpecialCells(12).Copy: Sheets(Item).Range("A1").PasteSpecial 3 .AutoFilter With Sheets(Item) .Move After:=Sheets(Sheets.Count) .Range("1:1").Font.Bold = True .Range("1:1").HorizontalAlignment = xlCenter .Range("A:W").EntireColumn.AutoFit .Range("C2:C1000").NumberFormat = "dd/mm/yyyy" .Range(.Range("A2"), .Range("A65536").End(xlUp)).Value = Evaluate("ROW(R:R)") End With Next .Parent.Activate End With Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
Anh xem lại code mới này thế nào nhé
Đúng là em không rành kế toán nên nhìn vào thấy lơ mơ quá---
Anh vận dụng code bài này để tách Sổ Chi Tiết Tài Khoản, nhưng làm không nổi, mong chú xem giúp. Sheet"CTGS" giống Sheet"DSToanTruong", Sheets"111" (làm mẫu) giống như ta phân lớp nhưng theo 2 cột (Trích theo cột D trước, cột E tìm theo cột D nếu có tài khoản trùng thì ghi vào, nếu không có thì tạo sheets mới. Nếu không rõ xin vui lòng thông báo.
Cám ơn
---Đúng là em không rành kế toán nên nhìn vào thấy lơ mơ quá
Anh cho hỏi: Với file của anh như vậy thì sao khi trích rút xong sẽ cho kết quả là bao nhiêu sheet? Tên sheet là gì?
Nếu có thể được, anh trích bằng tay luôn (ra kết quả toàn bộ), hy vọng em có thể hình dung được
Giống như bài trên đó chú: có bao nhiêu lớp thì ra bao nhiêu sheet, có bao nhiêu tài khỏan thì ra bao nhiêu sheets ( theo cột D: 111, 131...)sẽ cho kết quả là bao nhiêu sheet?
Tên sheets là tên lớp: 2A1 => sheets "2A1", tài khoản 111 => sheets"111"...Tên sheet là gì?
Theo bài trên thì chỉ có 1 sheets "DS Toan Truong", sau khi chạy code thì mới phân ra hàng loạt tên lớp. Ở đây cũng thế, chỉ có 1 sheets"CTGS", sau khi chạy code (theo cột D) thì mới phân ra hàng loạt theo tên tài khoản. Anh làm ví dụ cho chú hình dung rồi: sheets"111", ...Nếu có thể được, anh trích bằng tay luôn (ra kết quả toàn bộ), hy vọng em có thể hình dung được
Anh thử code này xem sao. Em sửa lại mẫu sổ chi tiết một chút, gộp 2 cột thu chi lại làm cột chứng từ. Vì không phải nghiệp vụ nào cũng phát sinh thu chi.---
Anh vận dụng code bài này để tách Sổ Chi Tiết Tài Khoản, nhưng làm không nổi, mong chú xem giúp. Sheet"CTGS" giống Sheet"DSToanTruong", Sheets"111" (làm mẫu) giống như ta phân lớp nhưng theo 2 cột (Trích theo cột D trước, cột E tìm theo cột D nếu có tài khoản trùng thì ghi vào, nếu không có thì tạo sheets mới. Nếu không rõ xin vui lòng thông báo.
Cám ơn
Sub Sochitiet()
On Error Resume Next
Dim cll As Range, Data As Range
Dim TK As String
Dim DataRows As Integer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Sheets("CTGS").AutoFilterMode = False
Set Data = Range(Sheets("CTGS").[A5], Sheets("CTGS").[F65536].End(xlUp))
DataRows = Data.Rows.Count - 1
For Each cll In Range(Sheets("CTGS").[D6], Sheets("CTGS").[D65536].End(xlUp))
If InStr(TK, cll.Value) = 0 Then
TK = TK & "," & cll.Value
Sheets("Mau").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = cll.Value
[A2].Value = cll.Value
Data.AutoFilter 4, cll.Value
Data.Offset(1).Resize(DataRows, 3).SpecialCells(12).Copy [A6]
Data.Offset(1, 4).Resize(DataRows, 2).SpecialCells(12).Copy [D6]
Data.AutoFilter 4
Data.AutoFilter 5, cll.Value
Data.Offset(1, 5).Resize(DataRows, 1).SpecialCells(12).Copy [D65536].End(xlUp).Offset(1 - ([D6].Value = ""), 2)
Data.Offset(1).Resize(DataRows, 4).SpecialCells(12).Copy [D65536].End(xlUp).Offset(1 - ([D6].Value = ""), -3)
Data.AutoFilter 5
End If
If InStr(TK, cll.Offset(, 1).Value) = 0 Then
TK = TK & "," & cll.Offset(, 1).Value
Sheets("Mau").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = cll.Offset(, 1).Value
[A2].Value = cll.Offset(, 1).Value
Data.AutoFilter 4, cll.Offset(, 1).Value
Data.Offset(1).Resize(DataRows, 3).SpecialCells(12).Copy [A6]
Data.Offset(1, 4).Resize(DataRows, 2).SpecialCells(12).Copy [D6]
Data.AutoFilter 4
Data.AutoFilter 5, cll.Offset(, 1).Value
Data.Offset(1, 5).Resize(DataRows, 1).SpecialCells(12).Copy [D65536].End(xlUp).Offset(1 - ([D6].Value = ""), 2)
Data.Offset(1).Resize(DataRows, 4).SpecialCells(12).Copy [D65536].End(xlUp).Offset(1 - ([D6].Value = ""), -3)
Data.AutoFilter 5
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub
---Anh thử code này xem sao. Em sửa lại mẫu sổ chi tiết một chút, gộp 2 cột thu chi lại làm cột chứng từ. Vì không phải nghiệp vụ nào cũng phát sinh thu chi.
Thắng thử Run code 2 lần liên tục sẽ thấy ngay vấn đề hoặc Run code lần 1 xong, ghi thêm 1 phát sinh vào Sheets"CTGS", tiếp tục Run code => .Anh thử code này xem sao
Em biết điều này chứ. Trước khi tạo sổ anh phải xoá hết tất cả các sổ chi tiết. Nếu không muốn xoá bằng tay thì viết code tự xoá luôn. Thêm đoạn này vào:---
Thắng thử Run code 2 lần liên tục sẽ thấy ngay vấn đề hoặc Run code lần 1 xong, ghi thêm 1 phát sinh vào Sheets"CTGS", tiếp tục Run code => .
Mến.
For Each sh In Sheets
If sh.Name <> "Mau" And sh.Name <> "CTGS" Then sh.Delete
Next
Sub Sochitiet()
On Error Resume Next
Dim cll As Range, Data As Range
Dim TK As String
Dim DataRows As Integer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
For Each sh In Sheets
If sh.Name <> "Mau" And sh.Name <> "CTGS" Then sh.Delete
Next
Sheets("CTGS").AutoFilterMode = False
Set Data = Range(Sheets("CTGS").[A5], Sheets("CTGS").[F65536].End(xlUp))
DataRows = Data.Rows.Count - 1
For Each cll In Range(Sheets("CTGS").[D6], Sheets("CTGS").[D65536].End(xlUp))
If InStr(TK, cll.Value) = 0 Then
TK = TK & "," & cll.Value
Sheets("Mau").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = cll.Value
[A2].Value = cll.Value
Data.AutoFilter 4, cll.Value
Data.Offset(1).Resize(DataRows, 3).SpecialCells(12).Copy [A6]
Data.Offset(1, 4).Resize(DataRows, 2).SpecialCells(12).Copy [D6]
Data.AutoFilter 4
Data.AutoFilter 5, cll.Value
Data.Offset(1, 5).Resize(DataRows, 1).SpecialCells(12).Copy [D65536].End(xlUp).Offset(1 - ([D6].Value = ""), 2)
Data.Offset(1).Resize(DataRows, 4).SpecialCells(12).Copy [D65536].End(xlUp).Offset(1 - ([D6].Value = ""), -3)
Data.AutoFilter 5
End If
If InStr(TK, cll.Offset(, 1).Value) = 0 Then
TK = TK & "," & cll.Offset(, 1).Value
Sheets("Mau").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = cll.Offset(, 1).Value
[A2].Value = cll.Offset(, 1).Value
Data.AutoFilter 4, cll.Offset(, 1).Value
Data.Offset(1).Resize(DataRows, 3).SpecialCells(12).Copy [A6]
Data.Offset(1, 4).Resize(DataRows, 2).SpecialCells(12).Copy [D6]
Data.AutoFilter 4
Data.AutoFilter 5, cll.Offset(, 1).Value
Data.Offset(1, 5).Resize(DataRows, 1).SpecialCells(12).Copy [D65536].End(xlUp).Offset(1 - ([D6].Value = ""), 2)
Data.Offset(1).Resize(DataRows, 4).SpecialCells(12).Copy [D65536].End(xlUp).Offset(1 - ([D6].Value = ""), -3)
Data.AutoFilter 5
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub
---
Tôi theo các bài của Ndu rất kỹ, các bài của Ndu càng về sau càng hoàn thiện và dễ xử dụng, bạn nói rõ xem bài nào thì xóa mất sheet tổng hợp, phân tích dữ liệu mà ảnh hưởng (chứ đừng nói đến xóa dữ liệu) thì phân tích làm gì hả bạn?
---
To: HNB, không thấy file đính kèm thì các bạn không giúp bạn được đâu. Thân chào
---
To: NDU, anh đang không hiểu cách xử dụng hàm InStr, chú giúp anh xem bài nói về hàm này ở đâu