Option Explicit ' Yêu cầu các biến cần được khai báo tường minh'
Function TraDL(LookUpRange As Range) ' Hàm có tên là TraDL & cần được cung cấp 1 tham số kiểu vùng ô'
' Mà cụ thể là 3 ô trên cùng dòng chứa dữ liệu lần lược là: NgaySinh, GioiTinh & CanNang'
Dim SoThg As Byte, jJ As Byte, SoCot As Byte
Dim Rng As Range, sRng As Range, Sh As Worksheet, Rng0 As Range
'Khai báo các biến để sử dụng trong hàm'
SoThg = DateDiff("M", LookUpRange.Cells(1, 1).Value, Date)
' Nhờ hàm DateDiff() trong VBA tính ra số tháng kể từ NgaySinh cho đến ngày hôm nay'
'Hàm này cũng giống như hàm DATEDIF() trong Excel'
Set Sh = Worksheets("PhuLuc") 'Gán trang "PhuLuc" vô biến đối tượng Sh'
Set Rng = IIf(LookUpRange.Cells(1, 2).Value = "Nam", Sh.Range("Nam"), Sh.Range("Nu"))
'Gán vùng đã đặt tên tương ứng của trang "PhuLuc" vô biến Rng, tùy thuộc trị chứa trong fái tính'
Set sRng = Rng.Find(SoThg, , xlFormulas, xlWhole): SoCot = Rng.Columns.Count
'Dùng fương thức tìm kiếm để tra dữ liệu theo số tháng tương ứng'
If sRng Is Nothing Then 'Nếu không tìm thấy thì:'
TraDL = "Nothing" ' Hàm trả về từ cho ta biết hàm không tìm thấy'
'Đây là 1 đề fòng cần thiết cho những ai chưa quen dùng hàm; Cũng giống như bãy lỗi trong công thức'
Else ' Nếu tìm thấy thì thực hiện tiếp cho đến khi gặp dòng End If'
Set Rng0 = sRng.Resize(, SoCot)
'Đem các ô của vùng tra tương ứng mà cùng dòng với ô tìm thấy gán vô biến đã khai báo'
For Each sRng In Rng0
'Tạo vòng lặp duyệt toàn bộ các ô chứa trong biến này'
jJ = jJ + 1
'Tăng mỗi lần duyệt 1 đơn vị nhằm biết được ta đang duyệt ô nào của biến'
With LookUpRange.Cells(1, 3)
'Khai báo là ta sẽ làm việc với ô thứ ba của tham số cung cấp ban đầu của hàm'
If .Value > sRng.Value And .Value <= sRng.Offset(, 1).Value Then
'Nếu trị trong ô ta khảo sát nhỏ hơn tham biến (ô 3) & ô bên fải liền kề với ô khảo'
'sát>= trị của tham biến 3 thì thực hiện các dòng dưới tiếp theo cho đến End If gần nhất'
TraDL = Rng.Cells(1, jJ).Value 'Lấy trị trong đầu cột của bảng tra gán vô hàm'
Exit For ' Thoát ngay khỏi vòng lặp - Không cần tiếp nữa tốn thời gian'
End If
End With 'Kết thúc With'
Next sRng 'Kết thúc vòng lặp với biến sRng'
End If 'Khóa đuôi hàm If đầu tiên trong hàm'
End Function