VLOOKUP nâng cao (hàm tự tạo)

Liên hệ QC

AndOrNot

Thành viên chính thức
Tham gia
27/6/12
Bài viết
75
Được thích
3
Chào các bác!

Em có 1 file muốn xây dựng 1 hàm tự tạo tương tự như VLOOKUP (sẵn có trong Excel), đặc điểm của hàm tự tạo này sẽ nâng cao hơn áp dụng cho việc tìm kiếm ngược về cột bên trái.

Chi tiết em gửi trong file đính kèm.

Các bác bớt chút thời gian xem qua và giúp đỡ!
 

File đính kèm

  • Vlookup nang cao (ham tu tao).xls
    15.5 KB · Đọc: 97
Chào các bác!

Em có 1 file muốn xây dựng 1 hàm tự tạo tương tự như VLOOKUP (sẵn có trong Excel), đặc điểm của hàm tự tạo này sẽ nâng cao hơn áp dụng cho việc tìm kiếm ngược về cột bên trái.

Chi tiết em gửi trong file đính kèm.

Các bác bớt chút thời gian xem qua và giúp đỡ!
Bạn tham khảo topic này xem có đúng ý bạn không: Dò tìm nâng cao với hàm VlookupD
 
Upvote 0
Chào các bác!

Em có 1 file muốn xây dựng 1 hàm tự tạo tương tự như VLOOKUP (sẵn có trong Excel), đặc điểm của hàm tự tạo này sẽ nâng cao hơn áp dụng cho việc tìm kiếm ngược về cột bên trái.

Chi tiết em gửi trong file đính kèm.

Các bác bớt chút thời gian xem qua và giúp đỡ!

hàm excel có sẵn rồi viết code làm chi
=INDEX($B$5:$B$10,MATCH(H14,$C$5:$C$10,0),0)
Nếu code thì đại loại thế này, bạn nghiên cứu thử nha
PHP:
Function vlookupLeft(dk As String, vung As Range, cot As Long)
Dim tim
Set tim = vung.Find(dk, , , 1)
If Not vung Is Nothing Then
   vlookupLeft = tim.Offset(, -cot)
End If
End Function
cú pháp thế này
=vlookupLeft(H14,C5:C10,1)
 
Lần chỉnh sửa cuối:
Upvote 0
Thêm một tham khảo cho bạn:
[GPECODE=vb]Function MVlookup(LVal As Variant, Rng As Range, Col1 As Long, Col2 As Long) As Variant
Dim Rng1 As Range, Tem As Range
Set Rng1 = Rng.Offset(, Col1 - 1).Resize(, 1)
Set Tem = Rng1.Find(LVal, LookIn:=xlValues, lookat:=xlWhole)
If Tem Is Nothing Then
MVlookup = "#N/A"
Else
MVlookup = Tem.Offset(, Col2 - Col1)
End If
End Function[/GPECODE]
Cú pháp: MVlookup(Trị dò, Vùng, Cột tìm kiếm, Cột chứa kết quả)

Bạn tham khảo trong file nhé.
 

File đính kèm

  • Vlookup nang cao (ham tu tao).xls
    34.5 KB · Đọc: 70
Upvote 0
Chào các bác!

Em có 1 file muốn xây dựng 1 hàm tự tạo tương tự như VLOOKUP (sẵn có trong Excel), đặc điểm của hàm tự tạo này sẽ nâng cao hơn áp dụng cho việc tìm kiếm ngược về cột bên trái.

Chi tiết em gửi trong file đính kèm.

Các bác bớt chút thời gian xem qua và giúp đỡ!

Đừng nói là dò ngược, thậm chí dò theo nhiều điều kiện cũng mần tuốt. Đó là LOOKUP
Công thức tại I14:
Mã:
=LOOKUP(2,1/($C$5:$C$10=$H14),$E$5:$E$10)
Công thức tại J14:
Mã:
=LOOKUP(2,1/($C$5:$C$10=$H14),$B$5:$B$10)
Khỏi cần hàm tự tạo, một hàm LOOKUP duy nhất
--------------
Còn việc "chế" ra hàm gần giống như VLOOKUP thì thôi... hãy quên đi. Làm được giống như nó cũng là chuyện không thể nào chứ đừng nói là NÂNG CAO:
- VLOOKUP có khả năng hoạt động trên Range lẩn Array
- VLOOKUP có khả năng dò tìm chính xác và dò tương đối (ta muốn vậy cũng hơi mệt)
- VLOOKUP có khả năng dò tìm từ nguồn của file khác (cái này ta muốn cũng e rằng không được)
vân vân...
 
Lần chỉnh sửa cuối:
Upvote 0
Thêm một tham khảo cho bạn:
[GPECODE=vb]Function MVlookup(LVal As Variant, Rng As Range, Col1 As Long, Col2 As Long) As Variant
Dim Rng1 As Range, Tem As Range
Set Rng1 = Rng.Offset(, Col1 - 1).Resize(, 1)
Set Tem = Rng1.Find(LVal, LookIn:=xlValues, lookat:=xlWhole)
If Tem Is Nothing Then
MVlookup = "#N/A"
Else
MVlookup = Tem.Offset(, Col2 - Col1)
End If
End Function[/GPECODE]
Cú pháp: MVlookup(Trị dò, Vùng, Cột tìm kiếm, Cột chứa kết quả)

Bạn tham khảo trong file nhé.

Cảm ơn bác! Đúng ý của em rồi
 
Upvote 0
Hàm LOOKUP() chưa thể trả về hơn 1 giá trị!

Hay tác giả topic đi theo hướng này có nghĩa hơn.

Trên diễn đàn cũng đã có chứ không fải không!

Nhưng bạn thử viết trước khi tìm xem sao?

Chúc thành công!
 
Upvote 0
Đừng nói là dò ngược, thậm chí dò theo nhiều điều kiện cũng mần tuốt. Đó là LOOKUP
Công thức tại I14:
Mã:
=LOOKUP(2,1/($C$5:$C$10=$H14),$E$5:$E$10)
Công thức tại J14:
Mã:
=LOOKUP(2,1/($C$5:$C$10=$H14),$B$5:$B$10)
Khỏi cần hàm tự tạo, một hàm LOOKUP duy nhất
--------------
Còn việc "chế" ra hàm gần giống như VLOOKUP thì thôi... hãy quên đi. Làm được giống như nó cũng là chuyện không thể nào chứ đừng nói là NÂNG CAO:
- VLOOKUP có khả năng hoạt động trên Range lẩn Array
- VLOOKUP có khả năng dò tìm chính xác và dò tương đối (ta muốn vậy cũng hơi mệt)
- VLOOKUP có khả năng dò tìm từ nguồn của file khác (cái này ta muốn cũng e rằng không được)
vân vân...

Cảm ơn thầy, bây giờ em mới biết cái hàm này có sẵn trong Excel.
 
Upvote 0
Cảm ơn bác! Đúng ý của em rồi

Có khi nào bạn có nhu cầu tìm kết quả ở CỘT 1, theo điều kiện CỘT 3 > 10 và <20 không ta?
Hoặc giả dò tìm kết quả ở CỘT 1, theo điều kiện CỘT 4 có ký tự đầu là "T"CỘT 3 > 100
Đây là những nhu cầu dò tìm rất bình thường
khi ấy code sẽ viết thế nào để bảo đảm tính TỔNG QUÁT của nhu cầu (mà ta chưa lường trước)?
Ẹc... Ẹc...
--------------
Góp ý với bạn: Không phải cái gì dùng VBA cũng ngon lành cả đâu (vì nếu thế thì bác Bill tốn công xây dựng hàm Excel để làm gì)
Cái gì có thể giải quyết bằng công thức ở mức đơn giản thì cứ xài... VBA chỉ nên dùng trong trường hợp ta chắc chắn rẳng không còn cách nào khác và nó là giải pháp tốt nhất
--------------------------
Hàm LOOKUP() chưa thể trả về hơn 1 giá trị!
LOOKUP là hàm mảng mà sư phụ. Sao lại không thể trả về hơn 1 giá trị chứ
 
Lần chỉnh sửa cuối:
Upvote 0
Thêm một tham khảo cho bạn:
[GPECODE=vb]Function MVlookup(LVal As Variant, Rng As Range, Col1 As Long, Col2 As Long) As Variant
Dim Rng1 As Range, Tem As Range
Set Rng1 = Rng.Offset(, Col1 - 1).Resize(, 1)
Set Tem = Rng1.Find(LVal, LookIn:=xlValues, lookat:=xlWhole)
If Tem Is Nothing Then
MVlookup = "#N/A"
Else
MVlookup = Tem.Offset(, Col2 - Col1)
End If
End Function[/GPECODE]
Cú pháp: MVlookup(Trị dò, Vùng, Cột tìm kiếm, Cột chứa kết quả)

Bạn tham khảo trong file nhé.
Cảm ơn bác! Đúng ý của em rồi

Theo em dùng hàm tự tạo trên worksheet thì nên sửa câu lệnh :
PHP:
MVlookup = "#N/A"
Thành
PHP:
MVlookup = CVErr(xlErrNA)
 
Upvote 0
Theo em dùng hàm tự tạo trên worksheet thì nên sửa câu lệnh :
PHP:
MVlookup = "#N/A"
Thành
PHP:
MVlookup = CVErr(xlErrNA)
Cảm ơn bạn, thực ra thì hôm qua tôi đã tìm rồi nhưng không biết cái #N/A ấy trong VBA nó là cái gì, trên Excel thì nó là hàm NA, còn trong VBA thì không tìm ra, tôi cũng đã thử tìm nó trong một đám WorksheetFunction rồi nhưng không thấy nên đành chịu.
Cảm ơn bạn!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom