Hàm Index (match) lấy giá trị sau cùng!!

Liên hệ QC

Mr Okebab

Ngon Ngất Ngây
Thành viên đã mất
Tham gia
6/8/06
Bài viết
3,260
Được thích
3,787
Sử dụng Index kết hợp với Match cho ta sự linh hoạt vì tính đa chiều của nó (Khác hẳn với Vlookup và Hlookup). Nhưng nó lại luôn cho ta giá trị đầu tiên tìm thấy.

Lấy ý tưởng của hàm Index kết hợp với Match nhưng lấy giá trị dưới cùng, mình chế ra 1 hàm để thực hiện công việc đó:

Mong các bác tham khảo và sửa chữa để hoàn thiện hơn.
PHP:
Function TimMa(Ma As String, MangMa As Range, MangGT As Range)
    On Error GoTo Thoat
    Dim i As Long
    If MangMa.Rows.Count <> MangGT.Rows.Count Then Exit Function
    If MangMa.Rows.Count < 1 Or MangGT.Rows.Count < 1 Then Exit Function
    For i = MangMa.Rows.Count To 1 Step -1
        If MangMa(i, 1) = Ma Then
            TimMa = MangGT(i, 1)
            Exit For
        End If
    Next
Thoat:
End Function
Đây là File VD :

Thân!
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Sau một hồi cải tiến, bây giờ ta có thể tìm xuôi (0) hay ngược (1) đều được hết.
Dĩ nhiên xuôi thì không nhanh bằng hàm của Excel rồi. Bác nào quan tâm thì cải tiến luôn.

PHP:
Function TimMa(Ma As String, MangMa As Range, MangGT As Range, Optional m As Byte)
    On Error GoTo Thoat
    Dim i As Long, iBD As Long, iKT As Long, iST As Integer
    If MangMa.Rows.Count <> MangGT.Rows.Count Then Exit Function
    If MangMa.Rows.Count < 1 Or MangGT.Rows.Count < 1 Then Exit Function
    If m <> 0 And m <> 1 Then Exit Function
    If m = 0 Then
        iBD = 1 : iKT = MangMa.Rows.Count :iST = 1
    ElseIf m = 1 Then
        iBD = MangMa.Rows.Count : iKT = 1 : iST = -1
    End If
        For i = iBD To iKT Step iST
            If MangMa(i, 1) = Ma Then
                TimMa = MangGT(i, 1)
                Exit For
            End If
        Next i
Thoat:
End Function

Thân!
 

File đính kèm

Upvote 0
Món này có thể dùng công thức mãng đơn giản đễ cho kết quả đấy Bắp à!
Thậm chí muốn tìm bất cứ vị trí nào trong cột cũng dc... rất dễ dàng:
Tìm record cuối cùng:
=INDIRECT(ADDRESS(MAX(IF($A$2:$A$10=$E$11,ROW($A$2:$A$10),"")),COLUMN($C$2:$C$10)))
Tìm record thứ 2 tính từ trên xuống:
=INDIRECT(ADDRESS(SMALL(IF($A$2:$A$10=$E$11,ROW($A$2:$A$10),""),2),COLUMN($C$2:$C$10)))
Vân vân và vân vân...
Tôi chỉ biết làm thế thôi, chứ còn lập trình như Bắp thì... bó tay!
ANH TUẤN
 
Upvote 0
anhtuan1066 đã viết:
Món này có thể dùng công thức mãng đơn giản đễ cho kết quả đấy Bắp à!
Thậm chí muốn tìm bất cứ vị trí nào trong cột cũng dc... rất dễ dàng:
Tìm record cuối cùng:

Tìm record thứ 2 tính từ trên xuống:

Vân vân và vân vân...
Tôi chỉ biết làm thế thôi, chứ còn lập trình như Bắp thì... bó tay!
ANH TUẤN

Vâng, để nhớ được một công thức như vậy quả là cả một vấn đề. Hơn nữa lại phải dùng công thức mảng. Vì vậy khó kết hợp với hàm khác.
Tất nhiên đây là một công thức hay.

Cảm ơn bác!!
 
Upvote 0
Hô... hô... vì ko biết lập trình nên đành ráng chịu... phải "nhớ" thôi chứ biết làm sao ??? Tôi nhiên cũng ko hẳn là "nhớ" mà là suy luận ra.. Chứ nhớ hết có mà chết!
Cái công thức của Bắp rất hay, tôi biết là khi tổng hợp hoặc trích xuất dử liệu sẽ có những yêu cầu tương tự như thế này... Có điều ko phải ai cũng biết cách áp dụng... Mấy bạn mới cùng lắm chỉ biết lấy file của Bắp về và làm trong file này chứ chưa chắc biết dùng ứng dụng này cho những file khác... Nên tôi mong rằng Bắp hảy làm thêm những VD khác có ứng dụng cái vừa tạo.. Thứ 2 nữa là nên làm nó thành 1 Add-ins... Hướng dẩn người ta cách cài Add-in này vào máy đễ xài cho những file khác... Khi áp dụng dc rồi tôi nghĩ là họ sẽ khoái đấy
Bắp nghĩ sao?
ANH TUẤN
GHI CHÚ: (Khoái UDF chứ ko phải khoái Bắp)... he... he...
 
Upvote 0
anhtuan1066 đã viết:
Hô... hô... vì ko biết lập trình nên đành ráng chịu... phải "nhớ" thôi chứ biết làm sao ??? Tôi nhiên cũng ko hẳn là "nhớ" mà là suy luận ra.. Chứ nhớ hết có mà chết!
Cái công thức của Bắp rất hay, tôi biết là khi tổng hợp hoặc trích xuất dử liệu sẽ có những yêu cầu tương tự như thế này... Có điều ko phải ai cũng biết cách áp dụng... Mấy bạn mới cùng lắm chỉ biết lấy file của Bắp về và làm trong file này chứ chưa chắc biết dùng ứng dụng này cho những file khác... Nên tôi mong rằng Bắp hảy làm thêm những VD khác có ứng dụng cái vừa tạo.. Thứ 2 nữa là nên làm nó thành 1 Add-ins... Hướng dẩn người ta cách cài Add-in này vào máy đễ xài cho những file khác... Khi áp dụng dc rồi tôi nghĩ là họ sẽ khoái đấy
Bắp nghĩ sao?
ANH TUẤN
GHI CHÚ: (Khoái UDF chứ ko phải khoái Bắp)... he... he...

Làm Add-Ins thì . . . vô cùng lắm, box này chỉ dành cho những người biết chút ít về VBA (hoặc biết sử dụng nó). UF thì nhiều, mọi người thấy cái nào phù hợp thì cho vào add-ins của riêng mình.
Như vậy dễ hơn. Và qua đó mọi người có thể biến đổi các UF cho phù hợp với mình hơn.

Chứ cho hết UF của em vào add-ins thì . . . các mem "chửi" em chết!!--=0

Thân!
 
Upvote 0
anhtuan1066 đã viết:
Nên tôi mong rằng Bắp hảy làm thêm những VD khác có ứng dụng cái vừa tạo.. Thứ 2 nữa là nên làm nó thành 1 Add-ins... Hướng dẩn người ta cách cài Add-in này vào máy đễ xài cho những file khác... Khi áp dụng dc rồi tôi nghĩ là họ sẽ khoái đấy
Bắp nghĩ sao?
ANH TUẤN

Việc áp dụng thì : Tiện hơn các hàm tham chiếu khác, tuy nhiên .....chậm hơn--=0

Với TH tìm xuôi thì dễ rồi, còn việc tìm ngược xuất phát từ việc :
Em bán một mã hàng, nhiều khi không có giá tham chiếu (đặc thù công việc) nên em muốn tìm lấy Giá bán gần nhất của mã hàng này. Vì ngày bán xếp theo thứ tự tăng dần nên em phải lấy giá trị dưới cùng.
Vì vậy em nghĩ, khi có 1 TH nào đó cần tìm giá trị từ dưới lên thì nên dùng hàm này.

Mai em sẽ post lên hàm có tính đến mã thỏa mãn (ngược xuôi) lần thứ mấy cho tiện (tất nhiên phải thêm 1 chỉ số nữa)

Hoặc bác nào có nhã ý thì làm giúp em luôn.

Thân!
 
Upvote 0
Mr Okebab đã viết:
Việc áp dụng thì : Tiện hơn các hàm tham chiếu khác, tuy nhiên .....chậm hơn--=0

Với TH tìm xuôi thì dễ rồi, còn việc tìm ngược xuất phát từ việc :
Em bán một mã hàng, nhiều khi không có giá tham chiếu (đặc thù công việc) nên em muốn tìm lấy Giá bán gần nhất của mã hàng này. Vì ngày bán xếp theo thứ tự tăng dần nên em phải lấy giá trị dưới cùng.
Vì vậy em nghĩ, khi có 1 TH nào đó cần tìm giá trị từ dưới lên thì nên dùng hàm này.

Mai em sẽ post lên hàm có tính đến mã thỏa mãn (ngược xuôi) lần thứ mấy cho tiện (tất nhiên phải thêm 1 chỉ số nữa)

Hoặc bác nào có nhã ý thì làm giúp em luôn.

Thân!

Và bây giờ em xin giới thiệu hàm trên :
PHP:
Function TimMa(Ma As String, MangMa As Range, MangGT As Range, So As Integer, Optional m As Byte)
    On Error GoTo Thoat
    Dim i As Long, i1 As Integer, iBD As Long, iKT As Long, iST As Integer
    If MangMa.Rows.Count <> MangGT.Rows.Count Then Exit Function
    If MangMa.Rows.Count < 1 Or MangGT.Rows.Count < 1 Then Exit Function
    If m <> 0 And m <> 1 Then Exit Function
    If So < 1 Then Exit Function
    If m = 0 Then
        iBD = 1
        iKT = MangMa.Rows.Count
        iST = 1
    ElseIf m = 1 Then
        iBD = MangMa.Rows.Count
        iKT = 1
        iST = -1
    End If
        For i = iBD To iKT Step iST
            If MangMa(i, 1) = Ma Then
                i1 = i1 + 1
                If i1 = So Then
                    TimMa = MangGT(i, 1)
                    Exit For
        End If: End If: Next
Thoat:
End Function

Hàm này sẽ giúp cho các bạn lọc dữ liệu chi tiết của 1 mã hàng, mã khách hàng . . . rất tốt.

Đây là File VD:

Thân!
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom