Viết code VBA thay cho dùng hàm vlookup (5 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

  • minhduongct

    Thành viên chính thức
    Tham gia
    6/12/12
    Bài viết
    86
    Được thích
    67
    Nghề nghiệp
    thủ kho
    Vấn đề của e trong topic này là: thay vì dùng hàm vlookup và kéo xuống mỗi khi phát sinh thêm chứng từ, vậy mọi người có cách nào hướng dẫn e viết một đoạn code trên sheets chungtu và đoạn code này sẽ chạy thay cho hàm vlookup mỗi khi e nhập mã tài sản thì cột DVT và Tên Tài Sản nó sẽ tự hiện và khi cột Mã Tài Sản trống thì các cột còn lại trống mà e không cần phải viết hàm vlookup và kèo dài xuống như vậy khi chứng từ phát sinh một lượng lớn thì cái sheet của e nó chạy cực kì chậm.
     

    File đính kèm

    Muốn bấm nút sau khi nhập thì:
    Mã:
    Option Explicit
    Sub GPE_Vlookup()
    Dim I As Long, Kq(), DL(), Nguon(), Itm, Dic As Object
    With Sheet1
        [COLOR=#ff0000][SIZE=3][B]DL = Range(.[C10], .[C65000].End(3)).Resize(, 6)[/B][/SIZE][/COLOR]
    End With
    With Sheet2
        [COLOR=#ff0000][SIZE=3][B]Nguon = Range(.[E9], .[E65000].End(3))[/B][/SIZE][/COLOR]
        ReDim Kq(1 To UBound(Nguon), 1 To 2)
        Set Dic = CreateObject("Scripting.dictionary")
        For I = 1 To UBound(DL)
        Itm = CStr(DL(I, 1))
            If Not Dic.exists(Itm) Then
                Dic.Add CStr(DL(I, 1)), I
            End If
        Next I
        For I = 1 To UBound(Nguon)
        Itm = CStr(Nguon(I, 1))
            If Dic.exists(Itm) Then
                Kq(I, 1) = DL(Dic.Item(Itm), 4)
                Kq(I, 2) = DL(Dic.Item(Itm), 2)
            End If
        Next I
        .[F9:G65000].ClearContents
        .[F9].Resize(I - 1, 2) = Kq
    Set Dic = Nothing
    End With
    End Sub

    bắt quả tang anh rồi nha . lêu lêu -=.,,-=.,,-=.,,
     
    Upvote 0
    Paste vào sheet Chứng từ thì xài sự kiện:
    Mã:
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim fRng As Range, Clls As Range
      If Target.Row > 8 And Target.Column = 5 Then
        For Each Clls In Target
          If Clls.Value = "" Then
            Clls.Offset(, 1).Resize(, 2) = ""
          End If
        Set fRng = Sheet1.Range(Sheet1.[C10], Sheet1.[C65000].End(3)).Find(Clls.Value, , xlValues, xlWhole)
          If Not fRng Is Nothing Then
            Clls.Offset(, 1) = fRng.Offset(, 3).Value
            Clls.Offset(, 2) = fRng.Offset(, 1).Value
          End If
        Next
      End If
    End Sub

    Muốn bấm nút sau khi nhập thì:
    Mã:
    Option Explicit
    Sub GPE_Vlookup()
    Dim I As Long, Kq(), DL(), Nguon(), Itm, Dic As Object
    With Sheet1
        DL = Range(.[C10], .[C65000].End(3)).Resize(, 6)
    End With
    With Sheet2
        Nguon = Range(.[E9], .[E65000].End(3))
        ReDim Kq(1 To UBound(Nguon), 1 To 2)
        Set Dic = CreateObject("Scripting.dictionary")
        For I = 1 To UBound(DL)
        Itm = CStr(DL(I, 1))
            If Not Dic.exists(Itm) Then
                Dic.Add CStr(DL(I, 1)), I
            End If
        Next I
        For I = 1 To UBound(Nguon)
        Itm = CStr(Nguon(I, 1))
            If Dic.exists(Itm) Then
                Kq(I, 1) = DL(Dic.Item(Itm), 4)
                Kq(I, 2) = DL(Dic.Item(Itm), 2)
            End If
        Next I
        .[F9:G65000].ClearContents
        .[F9].Resize(I - 1, 2) = Kq
    Set Dic = Nothing
    End With
    End Sub
    Từ đoạn code a đưa e biến đổi vào file của e như này hoài mà không đựơc, a sửa lại dùm e với ạ
     

    File đính kèm

    Upvote 0
    Mình có bảng dữ liệu tong hop dò tìm mã số cho ra đơn giá 1, đơn giá 2 từ bang 1, mình chỉ biết dùng vlookup nền chạy giật dò nhiều giá trị dò. Anh chị giúp mình cách nào cho chạy nhanh hơn không ạ? xin cám ơn
     

    File đính kèm

    Upvote 0
    Mình có bảng dữ liệu tong hop dò tìm mã số cho ra đơn giá 1, đơn giá 2 từ bang 1, mình chỉ biết dùng vlookup nền chạy giật dò nhiều giá trị dò. Anh chị giúp mình cách nào cho chạy nhanh hơn không ạ? xin cám ơn
    Thấy có bài hỗ trợ tại đây rồi sao vẫn đăng lại bạn ơi.
     
    Upvote 0
    Vấn đề của e trong topic này là: thay vì dùng hàm vlookup và kéo xuống mỗi khi phát sinh thêm chứng từ, vậy mọi người có cách nào hướng dẫn e viết một đoạn code trên sheets chungtu và đoạn code này sẽ chạy thay cho hàm vlookup mỗi khi e nhập mã tài sản thì cột DVT và Tên Tài Sản nó sẽ tự hiện và khi cột Mã Tài Sản trống thì các cột còn lại trống mà e không cần phải viết hàm vlookup và kèo dài xuống như vậy khi chứng từ phát sinh một lượng lớn thì cái sheet của e nó chạy cực kì chậm.
    code đơn giản
    Sub Macro1()
    Sheets("ChungTu").Range("F9:F30") = "=IFERROR(VLOOKUP(RC[-1],DMTS!R10C3:R36C6,4,0),"""")"
    Sheets("ChungTu").Range("G9:G30") = "=IFERROR(VLOOKUP(RC[-2],DMTS!R10C3:R36C6,2,0),"""")"
    Sheets("ChungTu").Range("F9:G30").Value = Sheets("ChungTu").Range("F9:G30").Value
    End Sub
     
    Chỉnh sửa lần cuối bởi điều hành viên:
    Upvote 0
    Không được dùng font chữ màu đỏ trong toàn bộ hoặc gần như toàn bộ bài viết.
    Cho hỏi lý do gì không được tô màu đỏ. vì tôi đang sử dụng theo công cụ của diễn dàn có bảng màu. Vậy không cho dùng tại sao diễn đàn làm chức năng tô màu đỏ để làm gì. Hay anh làm giống kiểu cộng sản. Chỉ có vua chúa mới quyền, dân không được làm. nên dẹp bỏ tư tưởng xấu xa đó đi. Tôi nói thật với anh Anh xóa Nick tôi cũng được. Không có 1 cái diễn đàn nào đã tạo ra công cụ đăng bài mà cấm người ta tô mảu đỏ xanh, chử nhỏ chứ lớn. Anh có chơi Facebook anh tôi đỏ xanh chẳng lẻ thằng FB nó bảo anh không tô màu lúc nào không. Anh có quá Già để lũ lấn không. Diễn đàn không nên để người cổ hủ như anh làm ban quản trị. Anh nên từ chức đi có lẽ phù hợp
    1743482138788.png
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Phê phán đường lối của Đảng là hành động chính trị.
    Việc này ảnh hưởng đến địa vị và danh dự của diễn đàn cũng như các thành viên khác trong diễn đàn.
     
    Upvote 0
    Phê phán đường lối của Đảng là hành động chính trị.
    Việc này ảnh hưởng đến địa vị và danh dự của diễn đàn cũng như các thành viên khác trong diễn đàn.
    Phê cái bà nội mầy. Thấy c.ứ.t lại nhảy bu vô ăn hay gì. Mầy cứ xóa Nick thỏa mái tao còn gần 500 nick, Tao dùng trên tiệm Nét nên mầy cứ Khóa IP thỏa mái
     
    Upvote 0
    Ban vĩnh viễn nick Minh Tam 2024 vì xúc phạm thành viên, xúc phạm ban quản trị và viết bài liên quan đến chính trị
     
    Upvote 0
    em muốn làm nút chọn để di chuyển giữa 2 sheet. Nếu tick chọn sheets("A") lấy dữ liệu sheets("A") ngược lại lấy sheets("B"). mong anh chị giúp em. Em cám ơn
     
    Upvote 0
    Web KT

    Bài viết mới nhất

    Back
    Top Bottom