Mình định rút gọn hàm tự tạo, nhưng không được!

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

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
14,566
Được thích
22,872
Nghề nghiệp
U80
Để viết hàm tự tạo, chủ yếu là tra ngược từ dưới lên, mình đã làm như sau & chạy ổn!:
Mã:
Option Explicit [b]
Function GVLooKup(LookUpVar, Rng As Range, Col As Byte, Optional Nguoc As Boolean)[/b]
 On Error GoTo ErrGVLK
 Dim vValues()
 Dim lLong As Long
 vValues = Rng
 If Nguoc Then
       For lLong = UBound(vValues) To 1 Step -1
2           If LookUpVar = vValues(lLong, 1) Then
3                 GVLooKup = vValues(lLong, Col)
4                 Exit For
5           End If
      Next
 Else
7     For lLong = 1 To UBound(vValues)
8          If LookUpVar = vValues(lLong, 1) Then
9                GVLooKup = vValues(lLong, Col)
                  Exit For
            End If
        Next
 End If
 LoiGVLK: Exit Function
 ErrGVLK: GVLooKup = "Xem Lai!"
[/b]
End Function[/b]
Mình thấy vẫn còn dài & thử viết ngắn lại, như sau:
Mã:
[b]
Function G_VLooKup(LookUpVar, Rng As Range, Col As Byte, Optional Nguoc As Boolean)[/b]
 On Error GoTo Err_GVLK
 Dim vValues()
 Dim BatDau, Cuoi, lLong As Long

 vValues = Rng
 If Nguoc Then
        BatDau = UBound(vValues):           Cuoi = 1
  Else
        BatDau = 1:         Cuoi = UBound(vValues)
 End If

 For lLong = BatDau To Cuoi
    If LookUpVar = vValues(lLong, 1) Then
        G_VLooKup = vValues(lLong, Col) :      Exit For
    End If
Next
Exit Function
Err_GVLK: G_VLooKup = "Xem Lai!"  [b]
End Function[/b]

Hàm làm không cho kết quả đúng, khi tìm ngược
(ác bạn giúp mình phát hiện chổ sai với!
 
Lần chỉnh sửa cuối:
Vấn đề là bước nhảy (step) trong vòng lặp For thôi bác ạ
Mã:
Function G_VLooKup(LookUpVar, Rng As Range, Col As Byte, Optional Nguoc As Boolean)
 On Error GoTo Err_GVLK
 Dim vValues()
 Dim BatDau, Cuoi, lLong As Long
 Dim Buoc
 vValues = Rng
 If Nguoc Then
        BatDau = UBound(vValues)
        Cuoi = 1
        Buoc = -1
  Else
        BatDau = 1
        Cuoi = UBound(vValues)
        Buoc = 1
 End If
 For lLong = BatDau To Cuoi Step Buoc
    If LookUpVar = vValues(lLong, 1) Then
        G_VLooKup = vValues(lLong, Col)
        Exit For
    End If
Next
Exit Function
Err_GVLK: G_VLooKup = "Xem Lai!"
End Function
 
Upvote 0
Web KT

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

Back
Top Bottom