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

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi adam_tran, 10 Tháng tám 2005.

5,276 lượt xem

  1. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    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.
     
    Last edited: 11 Tháng tám 2005
    #1
  2. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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
     
    #2
  3. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    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
     
    Last edited: 11 Tháng tám 2005
    #3
  4. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    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
     
    #4
  5. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    433
    Đã được thích:
    38
    Nơi ở:
    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
     
    #5
  6. xuantham

    xuantham Thành viên thân thiết

    Bài viết:
    5,338
    Đã được thích:
    590
    Giới tính:
    Nữ
    Nơi ở:
    4/1 Văn Chung - P13- Q. Tân Bình- TPHCM
    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ộ
     
    #6
  7. Secret_grasses

    Secret_grasses Thành viên sơ cấp

    Bài viết:
    317
    Đã được thích:
    3
    Nơi ở:
    Ngôi nhà nhỏ trên thảo nguyên.
    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)
     
    #7

Chia sẻ trang này