Viết code VBA thay cho dùng hàm vlookup (1 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