Dò tìm nâng cao với hàm VlookupD (1 người xem)

Liên hệ QC

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

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,902
Được thích
5,303
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 :

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
 

File đính kèm

Lần chỉnh sửa cuối:
Cám ơn bạn đã gửi bài viết về hàm vlookupd.
 
Upvote 0
Cám ơn bạn hoangdanh nhiều. Mình đang rất cần tìm kiếm nâng cao từ dưới lên trên như trong bài viết bạn đề cập. Nhưng làm thế nào để dùng được hàm vlookupD (vì mình dùng excel ko có hàm này), hình như phải copy code của bạn về đúng không. Bạn có thể hướng dẫn mình được ko? Rất cám ơn bạn.
 
Upvote 0
Cám ơn bạn hoangdanh nhiều. Mình đang rất cần tìm kiếm nâng cao từ dưới lên trên như trong bài viết bạn đề cập. Nhưng làm thế nào để dùng được hàm vlookupD (vì mình dùng excel ko có hàm này), hình như phải copy code của bạn về đúng không. Bạn có thể hướng dẫn mình được ko? Rất cám ơn bạn.
Tất nhiên phải dùng Code của hoangdoanh trong fie đó. Phải chọn Enable marco nhé
 
Upvote 0
Nếu trong cột dò tìm có dữ liệu trùng nhau thì sao bạn. Có tìm được hết không, hay chỉ tìm được dòng đầu tiên giống Vlookup
 
Upvote 0
Mình cũng có thắc mắc giống bạ nguyenbada.bk bạn hoangdanh282vn giải thích giúp với
 
Upvote 0
Nếu trong cột dò tìm có dữ liệu trùng nhau thì sao bạn. Có tìm được hết không, hay chỉ tìm được dòng đầu tiên giống Vlookup
Mình cũng có thắc mắc giống bạ nguyenbada.bk bạn hoangdanh282vn giải thích giúp với
Muốn biết việc này, bạn chỉ cần thử nghiệm trên file đính kèm ở bài #1 là biết ngay thôi mà.
 
Upvote 0
Muốn biết việc này, bạn chỉ cần thử nghiệm trên file đính kèm ở bài #1 là biết ngay thôi mà.
Vậy còn truờng hợp có 3 mã trùng trong một Colum nhưng ở colum khác có 3 giá trị khác nhau.
Ta có thể dùng Vlookup dò từ trên xuống và dùng VlookupD dò từ dứoi lên để lấy giá trị .Vậy còn mã ở giữa thì làm thế nào đây.

Bạn nghĩa Phúc xem bài link dứoi đây tuơng tự và giúp dùm nhé .trân trọng cám ơn nhiều

http://www.giaiphapexcel.com/forum/...iệu-trùng-có-đk-nay-chuyển-hàng-ngang-dễ-nhìn
 
Upvote 0
Mình đang rất cần hỏi bạn vấn đề này mà chưa thể giải quyết nổi với hàm dò tìm. Với các giá trị tìm kiếm giống nhau xuất hiện nhiều lần, làm cách nào để phân biệt chúng và vẫn trả về được giá trị cột tương ứng với giá trị đã tìm kiếm được. Cám ơn bạn nhiều.
 
Upvote 0
Mình đang rất cần hỏi bạn vấn đề này mà chưa thể giải quyết nổi với hàm dò tìm. Với các giá trị tìm kiếm giống nhau xuất hiện nhiều lần, làm cách nào để phân biệt chúng và vẫn trả về được giá trị cột tương ứng với giá trị đã tìm kiếm được. Cám ơn bạn nhiều.

bạn có thể sử hàm index và match
bạn up file lên đi. loại này trên diễn đàn rất nhiều
 
Upvote 0
Nếu bạn có thể để linh động hơn ở phía dò tìm là 1 range thay vì là cột 1 hay cột cuối thì hay hơn.
Ví dụ mình có thể vlookupD nhưng phía tìm kiếm là cột 3 hoặc cột khác ngoài range vùng dò tìm nhưng có dòng tương ứng với range dò tìm thì hay hơn.
 
Upvote 0
Hi anh Lê Văn,
Anh có thể hướng dẫn giúp em cụ thể về việc dùng code này ko ah? em bình thường chỉ dùng các hàm excel phổ biến chứ chưa bao giờ sử dụng đến ứng dụng này. Hôm nay làm file có chỗ cần đến hàm vlookupD này nên mần mãi mà chưa biết làm sao để dùng đc hàm này. Và em cũng co thắc mắc là giả sử như em đã có thể dùng vlookupD ở máy của em mà gửi file sang máy khác thì file ở máy khác có bị ảnh hưởng gì ko ah?
Rất mong anh Văn hoặc các anh. chị trong diễn đàn hướng dẫn em.
Tks!
 
Upvote 0
Hi anh Lê Văn,
Anh có thể hướng dẫn giúp em cụ thể về việc dùng code này ko ah? em bình thường chỉ dùng các hàm excel phổ biến chứ chưa bao giờ sử dụng đến ứng dụng này. Hôm nay làm file có chỗ cần đến hàm vlookupD này nên mần mãi mà chưa biết làm sao để dùng đc hàm này. Và em cũng co thắc mắc là giả sử như em đã có thể dùng vlookupD ở máy của em mà gửi file sang máy khác thì file ở máy khác có bị ảnh hưởng gì ko ah?
Rất mong anh Văn hoặc các anh. chị trong diễn đàn hướng dẫn em.
Tks!
1) Bạn đọc kỹ lại bài #1 có cả file và hướng dẫn sử dụng chi tiết. (trong file đã có code) muốn xem code bạn nhấn Alt+F11 nhấn Ctrl+R rồi xem code trong các module 1, module 2.
2) Hoàn toàn có thể dùng hàm VlookupD này trên máy khác. Vì khi copy file thì bạn đã copy luôn code trong file.
 
Upvote 0
gửi bạn chutchit
Theo mình thì
+) Phải có code trong file thì mới có thể tìm kiếm được.
+) Hàm này tương tự Vlookup bình thường nhưng có nhiều đối số hơn.
+) Muốn dùng được code thì bạn tìm trên GPE cách enable marco.
 
Upvote 0
Nhờ mọi người giúp hàm tìm kiếm với 2 điều kiện như trong bảng excel này ạ .

Nhờ mọi người hàm dò tìm trả giá trị vào cột ngày tháng ( cùng một công thức có thể copy paste theo dòng được các đối tượng khác ạ)
 

File đính kèm

Upvote 0
Giả sử trong một cột, có các điều kiện giống nhau ví dụ: điều kiện tìm KĐ được lặp lại trong cùng 1 cột > 2 lần, mình muốn lấy giá trị bé nhất, hoặc lớn nhất, hoặc nằm trong khoảng ???
 
Upvote 0
Giả sử trong một cột, có các điều kiện giống nhau ví dụ: điều kiện tìm KĐ được lặp lại trong cùng 1 cột > 2 lần, mình muốn lấy giá trị bé nhất, hoặc lớn nhất, hoặc nằm trong khoảng ???
dùng công thức mảng: Ctrl+Shift+Enter
Mã:
=MAX(IF(OFFSET($A$3:$A$8,,MATCH(M3,$A$2:$J$2,0)-1)=N3,$K$3:$K$8,""))
những cái khác bạn cứ làm sẽ được
 
Upvote 0
Web KT

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

Back
Top Bottom