Code VBA thay cho hàm Vlookup

Liên hệ QC

Phương Phương mito

Thành viên thường trực
Tham gia
1/5/19
Bài viết
275
Được thích
65
Kính gửi anh chị và các bạn
Em có thể thay hàm vlookup tại cột j bằng code VBA như thế nào ạ. Tại em có code copy rồi em muốn nó thêm cái code Vlookup nữa ạ cho tiện ạ.
 

File đính kèm

  • Code cho ham Vlookup.xlsx
    40.2 KB · Đọc: 55
Upvote 0
Click phải chuột vào tab sheet Can doi tai khoan, chọn View code, paste đoạn code này vào, nhập mã tk sẽ cho kết quả mã huy động
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, i&, TK(), MaHD()
TK = Range([C3], [C100])
ReDim MaHD(1 To UBound(TK), 1 To 1)
If Not Intersect(Target, [C3:C100]) Is Nothing Then
    For i = 1 To UBound(TK)
        Set Rng = Sheet2.[A1:A100].Find(TK(i, 1), , , 1)
        If Not Rng Is Nothing Then
            MaHD(i, 1) = Rng(, 2)
        End If
    Next
    [J3].Resize(i - 1, 1) = MaHD
End If
End Sub
chúc bạn thành công, nghiên cứu cả thớt anh @be09 cũng rất nhiều điều bổ ích
 
Upvote 0
Click phải chuột vào tab sheet Can doi tai khoan, chọn View code, paste đoạn code này vào, nhập mã tk sẽ cho kết quả mã huy động
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, i&, TK(), MaHD()
TK = Range([C3], [C100])
ReDim MaHD(1 To UBound(TK), 1 To 1)
If Not Intersect(Target, [C3:C100]) Is Nothing Then
    For i = 1 To UBound(TK)
        Set Rng = Sheet2.[A1:A100].Find(TK(i, 1), , , 1)
        If Not Rng Is Nothing Then
            MaHD(i, 1) = Rng(, 2)
        End If
    Next
    [J3].Resize(i - 1, 1) = MaHD
End If
End Sub
chúc bạn thành công, nghiên cứu cả thớt anh @be09 cũng rất nhiều điều bổ ích
Em cảm ơn anh ạ. Code chạy được rồi ạ !
 
Upvote 0
Click phải chuột vào tab sheet Can doi tai khoan, chọn View code, paste đoạn code này vào, nhập mã tk sẽ cho kết quả mã huy động
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, i&, TK(), MaHD()
TK = Range([C3], [C100])
ReDim MaHD(1 To UBound(TK), 1 To 1)
If Not Intersect(Target, [C3:C100]) Is Nothing Then
    For i = 1 To UBound(TK)
        Set Rng = Sheet2.[A1:A100].Find(TK(i, 1), , , 1)
        If Not Rng Is Nothing Then
            MaHD(i, 1) = Rng(, 2)
        End If
    Next
    [J3].Resize(i - 1, 1) = MaHD
End If
End Sub
chúc bạn thành công, nghiên cứu cả thớt anh @be09 cũng rất nhiều điều bổ ích
Anh ơi cho em hỏi thêm chút ạ. Với code Private này thì nó chỉ chạy khi em bấm nút F2 và enter nó mới active ạ. Có cách gì để nó tự động không ạ.
 
Upvote 0
Anh ơi cho em hỏi thêm chút ạ. Với code Private này thì nó chỉ chạy khi em bấm nút F2 và enter nó mới active ạ. Có cách gì để nó tự động không ạ.
Đây là sự kiện Selection change, có nghĩa khi có sự thay đổi j trong ô từ C3 đến C100 là sheet được cập nhật
 
Upvote 0
Anh ơi cho em hỏi thêm chút ạ. Với code Private này thì nó chỉ chạy khi em bấm nút F2 và enter nó mới active ạ. Có cách gì để nó tự động không ạ.
Bạn thử thêm code này để có nhiều lựa chọn
Mã:
Sub Do_Tim()
Dim Dic As Object, sArr(), i As Long, Ma(), tmp As String
Set Dic = CreateObject("scripting.dictionary")
With Sheets("Ma")
   Ma = .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 2).Value
End With
For i = 1 To UBound(Ma)
   Dic(Ma(i, 1)) = Ma(i, 2)
Next
With Sheets("Can Doi Tai Khoan")
   sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value
End With
For i = 1 To UBound(sArr)
   tmp = sArr(i, 3)
   If Dic.exists(tmp) Then
      sArr(i, 10) = Dic.Item(tmp)
   End If
Next
Sheets("Can Doi Tai Khoan").[A3].Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End Sub
 
Upvote 0
Kiểu add key chỉ có thể là phong cách của a Hải. like like...
 
Upvote 0
Bạn thử thêm code này để có nhiều lựa chọn
Mã:
Sub Do_Tim()
Dim Dic As Object, sArr(), i As Long, Ma(), tmp As String
Set Dic = CreateObject("scripting.dictionary")
With Sheets("Ma")
   Ma = .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 2).Value
End With
For i = 1 To UBound(Ma)
   Dic(Ma(i, 1)) = Ma(i, 2)
Next
With Sheets("Can Doi Tai Khoan")
   sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value
End With
For i = 1 To UBound(sArr)
   tmp = sArr(i, 3)
   If Dic.exists(tmp) Then
      sArr(i, 10) = Dic.Item(tmp)
   End If
Next
Sheets("Can Doi Tai Khoan").[A3].Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End Sub
Xin phép chủ thớt cho mình hỏi vấn đề liện quan
Chào bác. Bác có thê giải thích giúp em là
1. sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value
End(3) trong code có nghĩa là gì không ạ?
2. em thấy code gán kết quả là cả bảng,vấy có thể xét mỗi điều kiện và gán kết quả là mỗi phần kết quả được tìm thấy chứ không tác động đến dữ liệu của các cột xung quanh được không ạ ( giống làm VLOOKUP ấy ạ,chỉ lấy điều kiện là cột C ở sheet can doi tai khoan xong qua sheet Ma lấy kết quả tìm kiếm đượn gán vào ô địch thôi ý ạ)
Cảm ơn bác nhiều
 
Upvote 0
Tiêu đề chưa đạt với 2ui định
Code cho ham Vlookup
 
Upvote 0
Xin phép chủ thớt cho mình hỏi vấn đề liện quan
Chào bác. Bác có thê giải thích giúp em là
1. sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value
End(3) trong code có nghĩa là gì không ạ?
2. em thấy code gán kết quả là cả bảng,vấy có thể xét mỗi điều kiện và gán kết quả là mỗi phần kết quả được tìm thấy chứ không tác động đến dữ liệu của các cột xung quanh được không ạ ( giống làm VLOOKUP ấy ạ,chỉ lấy điều kiện là cột C ở sheet can doi tai khoan xong qua sheet Ma lấy kết quả tìm kiếm đượn gán vào ô địch thôi ý ạ)
Cảm ơn bác nhiều
Tôi chưa hiểu ý 2 của bạn, code vẫn lấy tham chiếu ở cột C để tìm bên sheet Ma đấy chứ
 
Upvote 0
Xin phép chủ thớt cho mình hỏi vấn đề liện quan
Chào bác. Bác có thê giải thích giúp em là
1. sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value
End(3) trong code có nghĩa là gì không ạ?
2. em thấy code gán kết quả là cả bảng,vấy có thể xét mỗi điều kiện và gán kết quả là mỗi phần kết quả được tìm thấy chứ không tác động đến dữ liệu của các cột xung quanh được không ạ ( giống làm VLOOKUP ấy ạ,chỉ lấy điều kiện là cột C ở sheet can doi tai khoan xong qua sheet Ma lấy kết quả tìm kiếm đượn gán vào ô địch thôi ý ạ)
Cảm ơn bác nhiều
Tạo thêm một mảng có số dòng bằng mảng kết quả và chỉ có một cột thôi. Như vậy sẽ không tác động đến dữ liệu xung quanh. Bạn chế biến thử xem sao.
 
Upvote 0
Tạo thêm một mảng có số dòng bằng mảng kết quả và chỉ có một cột thôi. Như vậy sẽ không tác động đến dữ liệu xung quanh. Bạn chế biến thử xem sao.
Cảm ơn Bác đã chỉ,em xin mượn code của bác sửa để học luôn được chứ ạ?

Mã:
Sub Do_Tim()
Dim Dic As Object, sArr(), i As Long, Ma(), tmp As String
Set Dic = CreateObject("scripting.dictionary")
With Sheets("Ma")
   Ma = .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 2).Value
End With
For i = 1 To UBound(Ma)
   Dic(Ma(i, 1)) = Ma(i, 2)
Next
With Sheets("Can Doi Tai Khoan")
   sArr = .Range("C3", .Range("c" & Rows.Count).End(3)).Resize(, 1).Value
End With
For i = 1 To UBound(sArr)
   tmp = sArr(i, 1)
   If Dic.exists(tmp) Then
      sArr(i, 1) = Dic.Item(tmp)
Else
      sArr(i, 1) = 0
   End If
Next
Sheets("Can Doi Tai Khoan").[J3].Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End Sub
Em sửa lại code như thế này thấy chạy kết quả là đúng không biết có gì sai sót không mong bác chỉ giúp ạ.cảm ơn bác
với lại bác giải thích giúp em là End(3)) trong dòng code này nghĩa là gì được không ạ?em vừa tự học nên không hiểu mong bác chỉ cho sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value
Bài đã được tự động gộp:

Tôi chưa hiểu ý 2 của bạn, code vẫn lấy tham chiếu ở cột C để tìm bên sheet Ma đấy chứ
Em vừa bắt đầu tự học VBA vào thử code của bác Hải thì code khi tìm xong gán dữ liệu từ mảng là từ cột A tới cột J ở sheet 【can doi tai khoan】. kết quả đúng nhưng khi gán như vậy thì em thấy nếu tác độc lên cả bàng thì có nhưng dữ liệu là dãy số thì bị đổi định dạng ,em vừa học nên muốn tìm hiểu để học hỏi từ các bác thôi ạ .em cảm ơn bác đã phản hồi
 
Lần chỉnh sửa cuối:
Upvote 0
End(3) hay End(4),. . . là câu lệnh giành cho những nhà siêu trí nhớ
Chúng ta nên xài ngôn ngữ tượng hình End(xlToRight),. . . .
Gì mà siêu trí nhớ hả bác? Chỉ có 1,2,3,4 tương đương trái, phải, lên , xuống thôi mà.
 
Upvote 0
Gì mà siêu trí nhớ hả bác? Chỉ có 1,2,3,4 tương đương trái, phải, lên , xuống thôi mà.
Bộ nhớ mỗi người đều khác nhau & cũng khác nhau của 1 người do thời gian, thời tiết hay thời điểm!
(on người đang cần iêu giành bộ nhớ cho tình cảm nhiều hơn cho lí trí,. . . .
 
Upvote 0
Em đã hiểu .and(3) rồi ! cảm ơn các bác nhiều
 
Upvote 0
Web KT

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

Back
Top Bottom