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

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

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#1
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:
L

levanduyet

Welcome
16/10/04
535
13
18
HCM
my.opera.com
#2
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

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#3
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

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#4
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 thân thiết
29/6/05
435
38
28
61
HCM city
#5
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

Thành viên thân thiết
18/8/05
5,355
610
113
53
#6
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

Cao cấp
#7
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)
 

Thành viên trực tuyến

  • daongocnam0603
  • thuongdan
  • camthuy68
  • Trangtb59
  • Anhnguyen712
  • Huyền Mia
  • Phần mềm FAST
  • congt
  • doanmai2509




Xem nhiều