Hàm Match dò từ cuối (1 người xem)

  • Thread starter Thread starter ThuNghi
  • Ngày gửi Ngày gửi
Liên hệ QC

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

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Các bạn viết hộ 1 func dò tìm theo thứ tự từ dưới lên trên
Match(A1,mang,z) = ??
mang này không theo thứ tự nào hết nên không dùng tham số 0,-1,1
Tôi tạo theo macro 1 sub mà không biết đưa thành func, và không linh họat
Nhờ các bạn giúp đỡ, nên a1:Ai là 1 tên mảng, b1 là ô bất kỳ
Mã:
Sub Mat()
Dim i, j As Integer
Dim khoa As String
Range("a1").Select
Range(Selection, Selection.End(xlDown)).Select
i = Selection.Rows.Count
For j = i To 1 Step -1
khoa = Range("b1").Value
If UCase(khoa) = UCase(Range("a" & j).Value) Then
MsgBox (j)
Exit Sub
End If
Next
End Sub

Xin cám ơn!
 
Như bạn ví dụ thì chỉ dò theo 1 cột từ dưới lên?

Hàm trả về số biểu thị số dòng còn lại của vùng chọn:
Mã:
 [b]Fuction FindUp(CSDL As Range, StrC)[/b]
 Dim iJ As Long, iZ As Long
 For iJ = 1 To 65535
    If Len(CSDL.Cells(iJ, 1)) < 1 Then Exit For
 Next iJ
 For iZ = iJ To 1 Step -1
 7   If CSDL.Cells(iZ, 1) = StrC Then Exit For
 Next
   FindUp = iJ - iZ
[b]End Function [/b]

Nếu bạn muốn tìm không phân biệt chữ hoa/chữ thường thì thêm hàm UCase$() vô dòng lệnh 7
 
Lần chỉnh sửa cuối:
Upvote 0
Xin cho 1 ví dụ
Tôi đã làm =FindUp(A,B1) => Value
=FindUp(A,"xxx") => Value
Với lại cột cần có tể là B5:B25 hay là C2:C10
Xin cám ơn!
 
Upvote 0
ThuNghi tham khảo thêm một cách nữa nhé!
Mã:
Option Explicit
'
Public Function Match_Pre(Giatri, Vungdo As Range)
Dim i As Long, dem As Long
If Vungdo.Rows.Count >= Vungdo.Columns.Count Then
    dem = 0
    If Vungdo.Cells(Vungdo.Rows.Count, 1) = Giatri Then
        Match_Pre = 1
        Exit Function
    End If
    For i = Vungdo.Rows.Count To 1 Step -1
        If Not IsEmpty(Vungdo.Cells(i, 1)) Then dem = dem + 1
        If Giatri = Vungdo.Cells(i, 1) Then
            Match_Pre = dem
            Exit Function
        End If
    Next i
Else
    dem = 0
    If Vungdo.Cells(1, Vungdo.Columns.Count) = Giatri Then
        Match_Pre = 1
        Exit Function
    End If
    For i = Vungdo.Columns.Count To 1 Step -1
        If Not IsEmpty(Vungdo.Cells(1, i)) Then dem = dem + 1
        If Giatri = Vungdo.Cells(1, i) Then
            Match_Pre = dem
            Exit Function
        End If
    Next i
End If
End Function
 
Upvote 0
Very thanks! phải thêm vào Ucase thì quá tuyệt.
Hàm này sẽ có nhiều ứng dụng cho thống kê lắm, bình thường muốn tìm như vậy phải Autofilter, cụ thể như tìm ngày bán hàng cuối của một giai đọan nào của một khách hàng.
one more time, thanks!
 
Upvote 0
Mình đã viết lại hàm của mình & thử nghiệm xong

Dù sao cũng xin lỗi vì đã làm mất thời zan của ThuNghi & các bạn!

(Xem tiếp tại bài trước!)
 
Upvote 0
SA_DQ đã viết:
Hàm trả về số biểu thị số dòng còn lại của vùng chọn:
Mã:
 [B]Fuction FindUp(CSDL As Range, StrC)[/B]
 Dim iJ As Long, iZ As Long
 For iJ = 1 To 65535
    If Len(CSDL.Cells(iJ, 1)) < 1 Then Exit For
 Next iJ
 For iZ = iJ To 1 Step -1
 7   If CSDL.Cells(iZ, 1) = StrC Then Exit For
 Next
   FindUp = iJ - iZ
[B]End Function [/B]

Nếu bạn muốn tìm không phân biệt chữ hoa/chữ thường thì thêm hàm UCase$() vô dòng lệnh 7
Bác xem lại trường hợ nếu giá trị StrC không được tìm thấy thì FindUp trả về giá trị là tổng số dòng trong vùng chọn (CSDL) +1 (?????)
Và hình như nếu nhập cho StrC giá trị = 0 thì hàm luôn trả về O (mặc dù trong vùng CSDL có ô có giá trị 0)
 
Upvote 0
Web KT

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

Back
Top Bottom