Bài viết: Dò tìm nâng cao với hàm VlookupD

Liên hệ QC

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,900
Được thích
5,276
Nghề nghiệp
Kinh doanh các mặt hàng văn phòng phẩm
Với hàm Vlookup thông thường, chúng ta chỉ sử dụng để dò tìm giá trị trong vùng dữ liệu từ trái qua phải, từ trên xuống dưới.

Để dò tìm giá trị từ phải qua trái thì ta phải kết hợp với 2 hàm là MacthIndex. Nhưng vẫn dò tìm từ trên xuống dưới.

Với hàm VlookupD, chúng ta sẽ giải quyết được vấn đề này và còn vài chức năng khác nữa :

kUIlU3WX58T-u7HZI62f92ea2o_69DlVkRtno-iHy1PDlHTGfcH5TsWxC_zXGkKEQ18YjGQwwsAik312CrVSye63LlzpjAjj4FPv_NJJbfGNMsg6cSTE2iCH0i-RTfwsuoGf73ll3oYRAHHrVXvGWVrq1VDIMzoEIV9HTa-wslr5fYBbVw3rNhAkhWtujMNR7z99plJWEh-fVqYB77k4yFsjh2-BZLlsEPxFuiXgGtzpwk-NHD9gkBuY5c1OCWZdnfOyz4JMrFfLi838HbPI1EK70071gsNxgSE3kaZlAbRqaaoWo0rDXoZztXZ099Dhj-q1AL2WYinPFBSFsu20ewPyBPtQiaxn52SLizvbj6tMMOfAtoy1956Up0zluu8_PNSvhELzNeH1WJoCGOQZknkIO8XeF76mTKDS4tzWkwApkqKF8-E_W_KlmhJGo1SEdKpkRHCJ5vLXQoawFpOdeSIPMLOcBq6-ocGh4rfbO4vJysXPzoPAWBIu01YEGFEVm13vY38BapJPznkj07W6hTQeweJSGAv_YVgbK0FkOER_wJ5pddeXPVHnjmu5yUr9aJrxqs1TovNT8LqxrUIuMLoC0wFJS27VHmz-gDWzNBPm6LCsTOyR=w1024-h557-no


VlookupD(Giá trị tìm kiếm, Vùng dò tìm, Thứ tự cột trả về, Phía dò tìm, Loại dò tìm, Điều kiện dò tìm)

- Giá trị dò tìm : Là giá trị dùng để tìm kiếm.

- Vùng dò tìm : Là vùng dữ liệu chứa giá trị tìm kiếm và giá trị trả về khi tìm thấy.

- Thứ tự cột trả về : Không bắt buộc, mặc định là 1. Là thứ tự của cột chứa giá trị trả về trong vùng dữ liệu.
+ Nếu Cột dò tìm là cột đầu tiên bên trái của Vùng dữ liệu thì Thứ tự được tính từ trái qua phải.
+ Nếu Cột dò tìm là cột cuối cùng bên phải của Vùng dữ liệu thì Thứ tự được tính từ phải qua trái.

- Phía dò tìm : Không bắt buộc, mặc định là 1. Phía dò tìm có 4 giá trị :
+ 1 : Cột dò tìm là cột đầu tiên bên trái vùng dữ liệu, dò tìm từ trên xuống dưới.
+ 2 : Cột dò tìm là cột đầu tiên bên trái vùng dữ liệu, dò tìm từ dưới lên trên.
+ 3 : Cột dò tìm là cột cuối cùng bên phải vùng dữ liệu, dò tìm từ trên xuống dưới.
+ 4 : Cột dò tìm là cột cuối cùng bên phải vùng dữ liệu, dò tìm từ dưới lên trên.

- Loại dò tìm : Không bắt buộc, mặc định là 1. Phía dò tìm có 4 giá trị :
+ 1 : Dò tìm chính xác với giá trị tìm kiếm (chưa phân biệt giữa chữ thường với chữ in hoa).
+ 2 : Dò tìm không chính xác. Giá trị tìm kiếm là một phần ký tự tính từ bên trái của giá trị dùng để so sánh.
(chưa phân biệt giữa chữ thường với chữ in hoa). VD giá trị dò tìm là "Da" thì kết quả "Danh" được chọn.
+ 3 : Dò tìm không chính xác. Giá trị tìm kiếm là một phần ký tự tính từ bên phải của giá trị dùng để so sánh.
(chưa phân biệt giữa chữ thường với chữ in hoa). VD giá trị dò tìm là "Anh" thì kết quả "Danh" được chọn.
+ 4 : Dò tìm không chính xác. Giá trị tìm kiếm có thể là một phần hay toàn bộ ký tự của giá trị dùng để so sánh.
(chưa phân biệt giữa chữ thường với chữ in hoa). VD giá trị dò tìm là "Anh" hay "da" thì kết quả "Danh" được chọn.


- Điều kiện dò tìm : Không bắt buộc, mặc định là False. Điều kiện dò tìm có 2 giá trị :
+ True : Dò tìm có phân biệt giữa chữ thường với chữ in hoa.
+ False : Dò tìm không phân biệt giữa chữ thường với chữ in hoa.

PHP:
Function VlookupD(Lookup_Value As Variant, Table_Array As Range, _
                  Optional Col_Index As Long = 1, _
                  Optional Side As Byte = 1, _
                  Optional Search_Order As Byte = 1, _
                  Optional MatchC As Boolean = False) As Variant
Application.Volatile
Dim Lookup_Col As Range, AfterCell As Range, Found As Range
Dim Col_Num As Byte, Str As String, SearchD As Variant
Col_Num = Table_Array.Columns.Count
If Trim(Lookup_Value) = "" Or Col_Index < 0 Or Col_Index > Col_Num _
Or Search_Order < 0 Or Search_Order > 4 Or Side < 0 Or Side > 4 Then
    VlookupD = "Error!"
    Exit Function
End If
Select Case Side
    Case 1
        Set Lookup_Col = Table_Array.Resize(, 1)
        Col_Index = Col_Index - 1
        Set AfterCell = Lookup_Col.Cells(Lookup_Col.Cells.Count)
        SearchD = xlNext
    Case 2
        Set Lookup_Col = Table_Array.Resize(, 1)
        Col_Index = Col_Index - 1
        Set AfterCell = Lookup_Col.Resize(1, 1)
        SearchD = xlPrevious
    Case 3
        Set Lookup_Col = Table_Array.Resize(, 1).Offset(, Col_Num - 1)
        Col_Index = 1 - Col_Index
        Set AfterCell = Lookup_Col.Cells(Lookup_Col.Cells.Count)
        SearchD = xlNext
    Case 4
        Set Lookup_Col = Table_Array.Resize(, 1).Offset(, Col_Num - 1)
        Col_Index = 1 - Col_Index
        Set AfterCell = Lookup_Col.Resize(1, 1)
        SearchD = xlPrevious
End Select
Select Case Search_Order
    Case 1: Str = Lookup_Value
    Case 2: Str = Lookup_Value & "*"
    Case 3: Str = "*" & Lookup_Value
    Case 4: Str = "*" & Lookup_Value & "*"
End Select
Set Found = Lookup_Col.Find(What:=Str, After:=AfterCell, LookIn:=xlFormulas, _
            LookAt:=xlWhole, SearchDirection:=SearchD, MatchCase:=MatchC)
If Found Is Nothing Then
    VlookupD = "#N/A"
    Exit Function
End If
VlookupD = Found.Offset(, Col_Index)
Set Lookup_Col = Nothing: Set AfterCell = Nothing: Set Found = Nothing
End Function

Một số bài viết có liên quan:
1/ Làm cách nào để ghi chú hiệu quả trong VBA?
2/ Conditional Formatting cho biểu đồ bằng VBA
3/ Khi nào nên sử dụng Msgbox, Inputbox và Userform?
4/ 8 thủ thuật trong VBE bạn nên biết
5/ Kích hoạt macro từ nút bấm ngoài bảng tính
6/ Làm thế nào để thay thế các chữ OK, CANCEL,... nhàm chán của Msgbox
7/ Giới thiệu VBA trong Excel
8/ Viết code để nhìn thấy ai là người cập nhật bảng tính của bạn lần gần đây nhất
9/ 4 cách sử dụng Immediate Window trong VBA hiệu quả hơn
10/ 3 gợi ý nhỏ mang lại thành công trong khai báo biến trong VBA
 

File đính kèm

  • VlookupD.rar
    6.7 KB · Đọc: 11
  • VlookupD.xls
    70.5 KB · Đọc: 12
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Chào bạn,
Dò tìm rất hay cho những trường hợp gần đúng hí hí, nếu đơn thuần vlookup từ cột phải sang trái thì dùng hàm vlookup kết hợp với hàm Choose nó ra đó bạn. Mình xài hoài à.

Trân trọng
Frankliszt
 
Lần chỉnh sửa cuối:
Chào bạn,
Dò tìm rất hay cho những trường hợp gần đúng hí hí, nếu đơn thuần vlookup từ cột phải sang trái thì dùng hàm vlookup kết hợp với hàm Choose nó ra đó bạn. Mình xài hoài à.

Trân trọng
Frankliszt


Bạn có thể ví dụ cụ thể kết hợp giữa Vlookup và Choose giúp mình nhé.
Cám ơn,
Ctson71.
 
Bạn Frankliszt có thể ví dụ cụ thể kết hợp giữa Vlookup và Choose giúp mình nhé.
Cám ơn,
Ctson71.
 
Bạn ơi
Làm sao có thể tạo được công thức mảng ở giữa vậy, mình cũng dùng Ctrl+Shift+Enter, nhưng ra ở cuối và đầu công thức thôi
=vlookup(giá trị dò tìm,Choose({1,2},vùng dò tìm,vùng kết quả),2,0).

Cám ơn

Mong được giúp đỡ
Cám ơn nhiều
 
Bạn ơi
Làm sao có thể tạo được công thức mảng ở giữa vậy, mình cũng dùng Ctrl+Shift+Enter, nhưng ra ở cuối và đầu công thức thôi
=vlookup(giá trị dò tìm,Choose({1,2},vùng dò tìm,vùng kết quả),2,0).

Cám ơn

Mong được giúp đỡ
Cám ơn nhiều
Thấy thế nào thì gõ thế đó bạn nhé.
 
bài viết hay quá mình sử dụng cách chia sẽ của bạn làm việc hiệu quả và nhanh hơn, thank bạn nhiều...^^ có bí quyết gì hay bạn chia sẽ nhiều nhé!
 
Sau có chỗ chưa đúng khi so sánh giữa 2 hàm VlookupD và VDoTim . File gửi kèm. Tác giả hàm VlookupD xem lại giúp dùm! Thanks
 

File đính kèm

  • VlookupD_VDoTim_HDoTim.xls
    71.5 KB · Đọc: 10
  • VlookupD_VDoTim_HDoTim.rar
    19.2 KB · Đọc: 10
Web KT
Back
Top Bottom