Dùng hàm tự tạo bổ trợ cho hàm VLOOKUP()

  • Thread starter SA_DQ
  • Ngày gửi

7844 lượt xem

S

SA_DQ

Thành viên thân thiết
29/6/05
446
41
28
62
HCM city
Giả sử chúng ta có danh sách 13 người với giới tính & dân tộc khác nhau như bảng dưới đây:

|A|B|C|D|E|F|G|H|
2|TT|Ho|Ten|GT|DanToc|TrinhDo|DoTuoi|DoTuoi|
3|01|Lê|Thơ|Nam|Kinh|Cấp II|16|16|
4|02|Đỗ|Hồng|Nu|Chàm|Cấp III|30|30|
5|03|Hồ|Việt|Nu|H mông|Cấp II|16|Cấp II|
6|04|Vy|Thy|Nam|Ê đê|Cấp III|23|Cấp III|
7|05|Mã|Thọ|Nam|Kinh|Đại học|32|32|
8|06|Ca|Lê|Nu|Kinh|Cấp II|15|15|
9|07|Ân|Duy|Nam|Chàm|Cấp III|26|26|
10|08|Cỗ|Văn|Nam|H mông|Cấp II|15|Cấp II|
11|09|Vũ|Hoàng|Nu|Ê đê|Cấp III|24|Cấp III|
12|10|Võ|Hòa|Nu|Kinh|Cấp I|12|12|
13|11|La|Chí|Nam|Kinh|Cấp II|16|16|
14|12|Ma|Văn|Nam|Chàm|Cấp III|26|26|
15|13|Di|Khảo|Nu|H mông|Đại học|34|Đại học|
. . . . . ( & bảng tra độ tuổi chuẩn: )
18|Phân loại|Kinh|Kinh|Ê đê|Ê đê|H mông|H mông|Chàm|Chàm|
19||Nam|Nữ|Nam|Nữ|Nam|Nữ|Nam|Nữ|
20|Cấp I|13|12|12|10|13|10|12|12|
21|Cấp II|16|15|16|16|15|16|16|16|
21|Cấp III|24|26|23|24|24|25|26|30|
22|Đại học|32|35|33|34|29|34|34|35|
| :wall:||.|.||.|.||.|

Nhiệm vụ đề ra là: Cần điền vô cột DoTuoi căn cứ vô giới tính, dân tốc & trình độ của người đó theo số liệu thống kê tại 'bảng tra'

Bình thường việc này ta dùng hàm VLOOKUP(. . ;. . .;. .;. . ) kết hợp hàm IF
(. .;. . ;. . ) là xong;

Như tại cột 'H' dòng thứ 3 ta nhập tạm công thức:
=VLOOKUP(F3,BangTra,IF(E3="Kinh",IF(D3="Nam",2,3),IF(E3="Chàm",IF(D3="Nam",8,9),1)),FALSE)

Nói là nhập tạm vì công thức chưa hoàn chỉnh; Ta mới xác định cho 2 trường hợp về dân tộc; Đó là dân tộc kinh & Chàm;
Tuy vậy công thức đã là khá dài & nếu hoàn chỉnh, công thức dài gần gấp đôi.
Nếu ta dùng chức năng Fill để kéo chép số liệu cho 12 ô còn lại, ta sẽ thấy 4 ô hiện lên các chuỗi chứ không phải dữ liệu kiểu số.
(Đó là những người có tính dân tộc khác với Kinh & Chàm)

Nhưng chúng ta không hoàn chỉnh tiếp & chuyển sang lập hàm tự tạo. Nhằm nhờ nó trả về cho chúng ta các số biểu thị cột cần thiết để hàm VLOOKUP() làm việc một cách bình thường;

Nội dung hàm đó như sau:

Mã:
Option Explicit
[B]Function CotTra(DanToc As Range, GT As Range)[/B]
 Dim DT As String
 
 DT = DanToc.Value
 CotTra = Switch(DT = "Kinh", 2, DT = "Chàm", 8, DT = [e18].Value, 4, _
           DT = [g18].Value, 6)  + IIf(GT <> "Nam", 1, 0)
[B]End Function[/B]
Một khi ta có hàm đó trong cửa sổ VBE
Ta sẽ nhập công thức tại 'G3' như sau: =VLOOKUP(F3,BangTra,CotTra(E3,D3),FALSE)

Sau đó chỉ việc dùng phương thức Fill copy xuồng các ô còn lại

(Xin xem thêm trong file & chúc khỏe)
 

Đính kèm

Sửa lần cuối:

Thành viên trực tuyến

Không có thành viên trực tuyến.

Xem nhiều