Vừa qua có rất nhiều bạn viết thư và nhắn tin hỏi tôi về các phương pháp trich lọc sổ cái từ bảng kê các chứng từ phát sinh hoặc từ nhật ký chung và nhờ giúp dùm trong các file cụ thể
Để "rộng đường dư luận" và cũng là để trao đổi và học tập thêm, nay tôi mở topic này đưa ra một ví dụ(một file cụ thể) để chúng ta cùng trao đổi và luận bàn nhé
Ai có chung mục đích xin nhấn Thank một cái để chúng ta cùng bàn
Dưới đây là file mẫu
Em có dùng code này nhưng không được anh ạ, anh có thể chỉnh sửa chút cho phù hợp với file đính kèm của em được ko, hay anh xem file của em có bị lỗi gì ko mà em dùng code của anh không được anh nhỉ?Bài 3 : Trích lọc bằng Find Methode
Để trích lọc, ta cũng có thể dung chức năng tìm kiếm trong Excel, cụ thể là ta dùng Find Methode (Edit Find… hoặc Ctr +F)
Mục đích của phương pháp này là dùng Find tìm kiếm trong hai cột tài khoản có và tài khoản nợ của NKC xem có tài khoản nào trùng với TK sổ cái thì nhặt đưa sang sổ cái. Về nguyên tắc chung, nó cũng gần giống như cách tìm bằng vòng lặp For…Next nhưng về tốc độ xử lý và tìm kiếm thì nhanh hơn rất nhiều
Mời các bạn xem file sẽ rõ
Bạn xem trong file;
Ẩn các dòng không cần thiết sau mỗi tác vụ macro với tài khoản được lựa
Macro sự kiện tại ô [F2]
Macro sự kiện của mình nằm trong trang tính cơ mà;
& Đảm bảo với bạn là không thể chậm hơn macro của bạn hưởng thụ của ai đó đem lại;
/(/ó đây nè:
PHP:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range, Sh As Worksheet, sRng As Range Dim Rws As Long, Dg As Long, Col As Long Dim MyAdd As String If Not Intersect(Target, [F2]) Is Nothing Then Set Sh = ThisWorkbook.Worksheets("SoKTMay") Rws = Sh.[H65500].End(xlUp).Row Rows("8:245").Hidden = False [B9].Resize(236, 8).ClearContents Set Rng = Sh.Range("I2: J" & Rws) Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole) If Not sRng Is Nothing Then MyAdd = sRng.Address Do With [B244].End(xlUp).Offset(1) Dg = sRng.Row .Value = Sh.Cells(Dg, "D").Value .Offset(, 1).Value = Sh.Cells(Dg, "C").Value .Offset(, 2).Value = Sh.Cells(Dg, "B").Value .Offset(, 3).Value = Sh.Cells(Dg, "H").Value If sRng.Column = 9 Then Col = 1 Else Col = -1 .Offset(, 4).Value = sRng.Offset(, Col).Value If sRng.Column = 9 Then Col = 1 Else Col = 0 .Offset(, 5 + Col).Value = Sh.Cells(Dg, "L").Value Set sRng = Rng.FindNext(sRng) End With Loop While Not sRng Is Nothing And sRng.Address <> MyAdd End If Dg = [b8].End(xlDown).Row + 2 Rows("245:" & Dg).Hidden = True End If End Sub
(*) Vậy bạn muốn tính tổng ở đâu thì lập sẵn công thức ở đó thôi;
(Hoặc trên dòng 8 hay nằm trên dòng cuối hay dòng dưới nó luôn hiện lên đó!)
Cách của bạn cũng rất hay nhưng mình thấy như cách của anh xuân thanh thì khi nhấn nút trích lọc thì nó chỉ cho giá trị những dòng có giá trị thôi, còn những dòng không có giá trị thì ko hiện, tuy nhiên cách của bạn thì những dòng không có giá trị bạn cho ẩn đi đúng không.Chậm hơn là do file đó của bạn có liên kết dữ liệu đến đâu đó mà thôi.
Macro thực thụ làm việc của mình nằm trong trang tính í (& nó là macro sự kiện)
Còn macro bạn fát hiện đó là mình ban đầu định sửa chữa lại cho gọn hơn; Nhưng sau đó mình đã bỏ í định đó & viết mới khác rồi.
Lần này mình có thêm tham biến để đo thời gian chạy của 2 macro; Chúng là tương đương
1.1 Mình sẽ không sửa code cho bạn đâu; Viết mới dễ hơn;
1.2 Cách của mình sẽ đem đến cho bạn sự tiện lợi khôn cùng; Đó là luôn lúc nào cũng chình ình cái mà mình gọi là Footer trang in sau mỗi lần chạy macro; Bạn có mườnhg tượng ra không?
Cái mà lâu nay bạn fải chép tới chép lui sau mỗi lần chạy macro đó!
1.3 Mình sẽ viết macro sự kiện; Nếu bạn vẫn ham cái nút bấm thì mình sẽ chỉ bạn chuyển macro sự kiện sang nút bấm sau này.
1.4 Tại trang 'SoKTMay' có các tài khoản như '311 ALâm' thì xử ra sao?
Mình tập hợp số tài khoản theo danh sách duy nhứt thì chỉ có 13 tài khoản là tuyền số mà thôi.
& trong khi chờ í của bạn, mình sẽ chỉ làm với mấy TK này mà thôi, nha!
2. Bạn sang GIAIPHAPEXCEL.COM, khai báo 1 NICK & tìm đến bài "Chập chững đến với VBA" down về mà đọc; Có gì mình sẽ giúp thêm;
Hẹn gặp bạn bên í!
3. Mình thấy báo cáo của bạn theo mẫu, nhưng vẫn hỏi bạn là: Bạn có muốn số TT các dòng dữ liệu được hiện lên ở cột 'A' thêm hay không?
/-(ãy cho mình biết sớm chính kiến của bạn!
1.3 Có nút hay chạy macro sự kiện là như nhau về tốc độ; Chưa nói đến việc bạn fải rê chuột đến nút sau khi chọn tài khoản tại ô chỉ định;
1.4 Tài khoản có chữ thì cũng xử được; Nhưng xử xong có đúng í bạn không lại là 1 chuyện;
Bạn xem trong file mình gởi kèm xem sao?
Trong file tổng số dòng tối đa của tài khoản đang xấp xỉ 480; & mình đang để giới hạn tối đa là 500 dòng gì đó; con số này có thể tăng lên theo í đồ của chúng ta nói chung;
Bạn cho biết xem trong 1 năm thì số dòng tối đa của TK nhiều dữ liệu nhất sẽ/đã là bao nhiêu?
3. Số TT là cho báo cáo của bạn có thiện cảm hơn mà thôi; Tuy nhiên cũng sẽ fải chi 1 chút tài nguyên & làm tốc độ macro chậm lại xíu!
4. Rất vui vì mình đã giúp được bạn việc gì đó & sẵn lòng giúp tiếp bạn nếu còn trong khả năng!
ah tài khoản cấp 1 là tài khoản chỉ có 3 ký tự đầu thôi bạn ah. ví dụ tài khoản tạm ứng cấp 1 là 141, tuy nhiên để chi tiết theo từng đối tượng thì ta có thể cho 141Alam, 141ATung,... Tuy nhiên ở file bạn sửa kia thì chỉ lấy các tài khoản chi tiết này mà thôi, còn các tài khoản cấp 1 của sổ cái thì chưa lấy. Nói nôm na là ta sẽ lấy tất cả có các tài khoản mà 3 ký tự đầu của nó giống nhau ấy mà (ví dụ: 141Alam và 141ATung thì có 3 ký tự đầu 141 giống nhau ấy).Nói bạn rõ trước, rằng mình nghe TK đã là ù tai rồi, còn cái cấp I hay thứ cấp gì gì ấy nữa thì hết biết luôn; Bạn thông cảm, mình không tẹo kiến thức nào về kế toán. Nên chắc bạn fải đưa file lên hay mô tả chi tiết hơn thì mình & bạn mới có thể tiếp tục được!
hẹn gặp bạn sớm hơn!
Bạn hiểu đúng rồi đó,khi đó danh sách không phải có thêm tài khoản 112... mình gửi lại file là bạn sẽ hiểu thôi. 112 là tài khoản tổng hợp của các tài khoản 1121, 1123 và 1123, Còn các tài khoản 1121, 1122 và 1123 là các tài khoản chi tiết của tài khoản 112. Nói đơn giản là 112 = Sum(1121,1122,1123)/(/ếu 112 là TK cấp I của 3 anh 1121, 1122 & 1123 thì
(*) 1121 có 41 dòng dữ liệu (DL)
(*) 1122 có 18 dòng DL
(*) 1123 có 16 dòng DL
Vậy mình hiểu như thế này (không biết đúng hay sai?): Khi chọn 112 tại [E2] tại trang 'SoCai' thì hiện lên toàn bộ (41 + 18 + 16) dòng DL
(& khi ấy trong danh sách TK có thêm mục 112 hay chỉ có 112 thay cho toàn bộ 3 TK nêu trên?)
Mong tin từ bạn (hay bạn nào rành chỉ dùm)!
Ok file bạn chỉnh lại rất nhanh và chuẩn, híc tuy nhiên có vấn đề bạn ah:/-)ã xong, vì trước đây sợ bạn giận thôi;
(hừ thì được lời như cỡi tấm lòng rồi! hi, hi,. . . vui thôi!
Trong bài 34 mình đã hỏi bạn con số này rồi, mà bạn có trả lời đâu kia chứ?
Nên mình Vũ Như Cẩn thôi!Mã:[SIZE="3"][COLOR="blue"]Trong file tổng số dòng tối đa của tài khoản đang xấp xỉ 480; & mình đang để giới hạn tối đa là 500 dòng gì đó; con số này có thể tăng lên theo í đồ của chúng ta nói chung; [B][I]Bạn cho biết xem trong 1 năm thì số dòng tối đa của TK nhiều dữ liệu nhất sẽ/đã là bao nhiêu?[/I][/B][/COLOR][/SIZE]
Cái bảng "Big" đó báo cho chúng ta biết dữ liệu vượt quá thiết kế;
(Mình đã sửa tăng lên 1.000 dòng tuần tự theo các bước như sau):
(1*) Tăng trị trong fần khai báo hằng số trong macro sự kiện từ con số 500 thành 1.000
(2*) Dùng chuột ta chọn các hàng từ 500 miết tới 1.000 & vô menu Insert để thực hiện fương thức thêm dòng;
(Lúc đó ô có lời ghi chú là "mốc cuối" sẽ ở [A1001])
Em chào anh xuanthanh. Đọc bài của anh em thấy đúng là cái em đang cần.Nhưng em đang phân vân vì trong bảng tính trong sổ cái tk không hiển thị công thức nên em không biết áp dụng vào phai của mình như nào. Rất mong được anh chỉ giúp. Thank anh nhiều