Macro trích lọc danh sánh duy nhất

  • Thread starter adam_tran
  • Ngày gửi
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
Hôm nay đang tập giải quyết 1 số vấn đề của Excel và kế toán bằng coding VBA, cần macro trích lọc DM duy nhất, chợt nhớ cái topic hôm nọ về trích lọc danh mục duy nhất nên post lên đây. Có nhiều cách trích lọc sử dụng bằng Filter, công thức, vùng đệm, cách này tớ chỉ dùng thuần túy macro.
Cách làm: Bạn chọn ô nơi bạn bắt đầu nhập giá trị DM duy nhất.
Chọn macro Onlylist, nhập vào địa chỉ danh mục bạn cần trích lọc, nếu đó là 1 name thì bạn nhập tên name, thí dụ MaVL, không thì nhập địa chỉ cụ thể, thí dụ A1:A50.
Code:

Sub OnlyList()
On Error Resume Next
Dim i As Long, dsNguon As Range, dsLoc As Range
Set dsLoc = Range(Selection, Selection.Offset(1000, 0))
Set dsNguon = Range(InputBox("Nhap vao danh sach can trich loc"))
Selection = dsNguon(1)
For i = 1 To dsNguon.Rows.Count
If Not Tontai(dsNguon(i), dsLoc) And dsNguon(i) <> "" Then
Selection.Offset(1, 0).Select
Selection = dsNguon(i)
End If
Next i
End Sub
Function Tontai(Giatri, List As Range)
Dim i As Long
Tontai = False
For i = 1 To List.Rows.Count
If List(i) = "" Then
Exit Function
ElseIf Giatri = List(i) Then
Tontai = True
Exit Function
End If
Next i
End Function

Lỗi bác Duyệt nói tớ cũng thấy 2 chỗ, đó là cố định kiểu biến Giatri as String là tiêu, thứ 2 là khi macro Onlylist gặp lỗi thì ...
Bác Duyệt đúng là cao thủ, bởi thế tui quyết chí bái bác làm thầy dạy VBA.
 
Sửa lần cuối:
Khóa học Quản trị dòng tiền
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
adam_tran nói:
Hôm nay đang tập giải quyết 1 số vấn đề của Excel và kế toán bằng coding VBA, cần macro trích lọc DM duy nhất, chợt nhớ cái topic hôm nọ về trích lọc danh mục duy nhất nên post lên đây. Có nhiều cách trích lọc sử dụng bằng Filter, công thức, vùng đệm, cách này tớ chỉ dùng thuần túy macro.
Cách làm: Bạn chọn ô nơi bạn bắt đầu nhập giá trị DM duy nhất.
Chọn macro Onlylist, nhập vào địa chỉ danh mục bạn cần trích lọc, nếu đó là 1 name thì bạn nhập tên name, thí dụ MaVL, không thì nhập địa chỉ cụ thể, thí dụ A1:A50.
File này tớ ẩn đi (hide window), bạn copy file xls vào thư mục xlstart hoặc copy code vào bất cứ file nào bạn cần.
To: adam_tran,
Code của em lỗi nhiều lắm. Khi nào có thời gian sẽ giải thích nhiều hơn.
Chúc bạn khỏe.
Lê Văn Duyệt
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
levanduyet nói:
To: adam_tran,
Code của em lỗi nhiều lắm. Khi nào có thời gian sẽ giải thích nhiều hơn.
Chúc bạn khỏe.
Lê Văn Duyệt
Hì hì hì, không lỗi mới lạ chứ! Bởi vậy cứ 1-2 gọi cho anh hoài, kêu làm sư phụ mà chưa chịu nhận! Chắc lỗi ở chỗ nếu trong DS kiểm tra có Blank cell thì nó exit luôn phải không, bởi thế để riêng cái Function Tontai thì không xài được.

To All member tại HCM:
Anh Duyệt nói sẽ photocopy tài liệu VBA cho các bạn ở HCM, bạn nào đăng ký thì đăng ký nhanh, nghe WhoAmI nói thì hình như có 3 cuốn. Photo thì rẻ mà, đăng ký rồi chọn ngày nào đó offline, cafe gặp nhau 1 buổi để nhận tài liệu từ sư phụ.
Bạn nào đăng ký Photo thì post lên đây kèm theo email và số phone!
Danh sách đã đăng ký:
1. adam_tran
2. Workman
 
Sửa lần cuối:
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
Phát triển từ OnlyList

To anh Duyệt,
Thủ tục này em dùng cho việc trích lọc 1 danh sách duy nhất ở cột SốCT, với nhiều điều kiện ràng buộc ở cột Ngày, Loại (N or X) và Mã KH. Tất nhiên dùng Advnaced Filter thì khỏe re, nhưng em muốn dùng VBA, đang tập mà!

Sub FiltOnlyList(Nguon As String, KtraNgay, KtraLoai, KtraKH, Optional Ngay1 = 0, _
Optional Ngay2 = 400000, Optional Loai = "All", Optional KH = "All")
Dim i As Long, dsNguon As Range, dsKtraNgay As Range, dsKtraLoai As Range, dsKtraKH As Range, dsLoc As Range
Set dsLoc = Range(Selection, Selection.Offset(1000, 0))
Set dsNguon = Range(Nguon)
Set dsKtraNgay = Range(KtraNgay)
Set dsKtraLoai = Range(KtraLoai)
Set dsKtraKH = Range(KtraKH)
If dsNguon.Rows.Count <> dsKtraNgay.Rows.Count Then Exit Sub
For i = 1 To dsNguon.Rows.Count
If Not Tontai(dsNguon(i), dsLoc) And (dsNguon(i) <> "") And (dsKtraNgay(i) >= Ngay1) _
And (dsKtraNgay(i) <= Ngay2) Then
If KH = "All" Then
If Loai = "All" Then
Selection = dsNguon(i)
Selection.Offset(1, 0).Select
Else
Select Case dsKtraLoai(i)
Case Loai
Selection = dsNguon(i)
Selection.Offset(1, 0).Select
End Select
End If
Else
If Loai = "All" Then
Select Case dsKtraKH(i)
Case KH
Selection = dsNguon(i)
Selection.Offset(1, 0).Select
End Select
Else
If (dsKtraLoai(i) = Loai) And (dsKtraKH(i) = KH) Then
Selection = dsNguon(i)
Selection.Offset(1, 0).Select
End If
End If
End If
End If
Next i
End Sub
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
568
99
28
66
HCM city
Lọc DS duy nhất = cách này có thuận không, các Bác?

Để lọc DS mã KHàng duy nhất đã giao dịch trong tháng tôi thực hiện như sau, xin nêu ra đây các Bác cho nhận xét giúp:
b1 Xếp & lọc dữ liệu KH trong tháng;
b2 Dùng VBA duyệt từ đầu trường KH đã lọc để nhập vào biến mãng ~ mã KH không lặp lại;
b3 Chép vào nơi nào đó của Sheet;
:food-smil
 
xuantham

xuantham

Cao cấp
18/8/05
5,376
652
113
58
TP. Hồ Chí Minh
adam_tran nói:
To All member tại HCM:
Anh Duyệt nói sẽ photocopy tài liệu VBA cho các bạn ở HCM, bạn nào đăng ký thì đăng ký nhanh, nghe WhoAmI nói thì hình như có 3 cuốn. Photo thì rẻ mà, đăng ký rồi chọn ngày nào đó offline, cafe gặp nhau 1 buổi để nhận tài liệu từ sư phụ.
Bạn nào đăng ký Photo thì post lên đây kèm theo email và số phone!
Danh sách đã đăng ký:
1. adam_tran
2. Workman

Mình chưa vào lớp chồi VBA thì có đọc tài liệu này nỗi không? Nếu các bác thấy "dzuyet" thì cho mình đăng ký 1 bộ
 
Secret_grasses

Secret_grasses

Guest
Anh Duyệt ơi ,
Anh cũng photo dùm em tài liệu VBA với nhé.
Email:secret_grasses@yahoo.com
Phone: 843 1521 (sau 21h)
 

Xem nhiều

Webketoan Zalo OA