VLOOKUP
參考文章:
[2] EXCEL入門IF函數
0x01 基本介紹
在Excel函數中,有那么的一個萬金油Excel函數,它既可以正向查找,逆向查找,多條件查找,還能模糊匹配,它就是Vlookup。Vlookup與IF、SUM、sumifs/countifs譽為四大必學Excel函數。先看看它的語法:
=VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
# lookup_value:用誰找
# table_array:在哪里找
# col_index_num:返回第幾列
# range_lookup:匹配類型
FALSE:精確查找
TRUE:近似查找
### 在函數里面的標點要使用英文輸入法下的標點,在Excel上,SUM的參數個數是不固定的,區域和數值的參數也能混合使用。
說明:
我們所有的案例都是基於這張表格:
A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
1 | ID | Name | 力量 | 敏捷 | 話術 | 魅惑 | ID |
2 | 121601 | 尼爾 | 90 | 90 | 90 | 70 | 121601 |
3 | 121602 | 芙蕾雅 | 40 | 60 | 10 | 90 | 121602 |
4 | 121603 | 弗朗哥 | 80 | 80 | 60 | 90 | 121603 |
5 | 121604 | 塞拉 | 80 | 60 | 70 | 90 | 121604 |
6 | 121605 | 凱林 | 30 | 90 | 80 | 80 | 121605 |
0x02 基本用法
我們要在成績單中找到尼爾、芙蕾雅、凱林的話術分別是多少?
A | B | C | D | E | F | G | H | I | |
---|---|---|---|---|---|---|---|---|---|
1 | ID | Name | 力量 | 敏捷 | 話術 | 魅惑 | ID | Name | 話術 |
2 | 121601 | 尼爾 | 90 | 90 | 90 | 70 | 121601 | 尼爾 | ?? |
3 | 121602 | 芙蕾雅 | 40 | 60 | 10 | 90 | 121602 | 芙蕾雅 | ?? |
4 | 121603 | 弗朗哥 | 80 | 80 | 60 | 90 | 121603 | 凱林 | ?? |
5 | 121604 | 塞拉 | 80 | 60 | 70 | 90 | 121604 | ||
6 | 121605 | 凱林 | 30 | 90 | 80 | 80 | 121605 |
在此我們構造一個函數:
=VLOOKUP(H2,$B$2:$F$6,4,FALSE)
- 需要注意的是,返回第幾列指的不是以原表為參考系的,而是以table_array確定的范圍為參考系,因此這里返回的列數是B2:F6的第四列,也就是話術這一列
- 匹配類型有兩種:FALSE(0)是精確匹配,TRUE(1)是模糊匹配。
0x03 拓展用法
所有的拓展用法都是對基本用法中的參數進行改造。
03.01 查找多列
A | B | C | D | E | F | G | H | I | J | K | |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | ID | Name | 力量 | 敏捷 | 話術 | 魅惑 | ID | Name | 力量 | 敏捷 | 話術 |
2 | 121601 | 尼爾 | 90 | 90 | 90 | 70 | 121601 | 尼爾 | ?? | ?? | ?? |
3 | 121602 | 芙蕾雅 | 40 | 60 | 10 | 90 | 121602 | ||||
4 | 121603 | 弗朗哥 | 80 | 80 | 60 | 90 | 121603 | ||||
5 | 121604 | 塞拉 | 80 | 60 | 70 | 90 | 121604 | ||||
6 | 121605 | 凱林 | 30 | 90 | 80 | 80 | 121605 |
在此我們構造一個函數:
=VLOOKUP($H2,$B$2:$F$6,COLUMN(B1),FALSE)
和基本用法不同的是:
- lookup_value:這里我們使用的混合引用,限制了列號不允許改變
- col_index_num:這里我們利用了一個函數的返回值來作為參數,因為一個公式中的常量,在拖動的時候不會改變
- COLUMN()返回的是一個單元格的列號,因此 COLUMN(B1)=2,COLUMN(C1)=3
03.02 逆向查找
A | B | C | D | E | F | G | H | I | |
---|---|---|---|---|---|---|---|---|---|
1 | ID | Name | 力量 | 敏捷 | 話術 | 魅惑 | ID | Name | ID |
2 | 121601 | 尼爾 | 90 | 90 | 90 | 70 | 121601 | 尼爾 | ?? |
3 | 121602 | 芙蕾雅 | 40 | 60 | 10 | 90 | 121602 | ||
4 | 121603 | 弗朗哥 | 80 | 80 | 60 | 90 | 121603 | ||
5 | 121604 | 塞拉 | 80 | 60 | 70 | 90 | 121604 | ||
6 | 121605 | 凱林 | 30 | 90 | 80 | 80 | 121605 |
這個要求看似很簡單,如果我們構造函數如下:
=VLOOKUP(H2,$A$2:$B$6,1,FALSE)
則得到返回值#N/A
這是因為VLOOKUP函數默認將 lookup_value 與 table_array 的第一列匹配,當函數將“尼爾”與“ID“列進行匹配時,自然找不到對應的元素,報錯返回#N/A
那么正確的方法是什么呢?
我們接下來試試如下函數:
=VLOOKUP(H2,IF({1,0},B2:B6,A2:A6),2,0)
通過 IF({1,0},B2:B6,A2:A6)
我們能把B列與A列的位置互換,從而使B列變成第一列,A列變成第二列。需要注意的是,VLOOKUP的第三個參數也要寫成新構造的逆向區域的列數”2“
輸入后記得是按[Ctrl+Shift+Enter],因為里面是含有數組運算的,均需要按三鍵結束才能達到正確答案。
具體的IF({1,0})的解釋我放在后面的補充說明部分了,感興趣的可以看一下。
03.03 多重查找
我們現在有新表如下:
A | B | C | D | E | F | G | H | I | |
---|---|---|---|---|---|---|---|---|---|
1 | ID | Name | 力量 | 敏捷 | 模組 | ID | Name | 模組 | 力量 |
2 | 121603 | 弗朗哥 | 20 | 30 | 達克夏爾 | 121601 | 弗朗哥 | 達克夏爾 | ?? |
3 | 121606 | 弗朗哥 | 90 | 90 | 多莉絲 | 121602 |
我們有兩個弗朗哥,單憑一個條件已經不能篩選出我們要的數據了,我們可以通過模組這個元素來進一步篩選:
我們構造函數如下:
=VLOOKUP($G2&$H2,IF({1,0},$B$2:$B$3&$E$2:$E$3,$C$2:$C$3),2,0)
其中,構造的區域長這樣:
Name模組 | 力量 |
---|---|
弗朗哥達克夏爾 | 20 |
弗朗哥多莉絲 | 90 |
另外:如果多重條件查找返回的結果是數值,可以通過sumifs函數來匹配出結果值,這樣省去寫很長公式的麻煩。
0x0X 補充說明
0X.00 TRUE OR FALSE ?
excel使用0代替假,但並非只有1可以代替真,所有非1的數值都可以代替真。
因此:
TRUE == 0
FALSE != 0
0X.01 '$'表示絕對引用
在公式中采用$表示對數據區域的絕對引用。
相對引用、絕對引用和混合引用是指在公式中使用單元格或單元格區域的地址時,當將公式向旁邊復制時,地址是如何變化的。
具體情況舉例說明:
- 相對引用:復制公式時地址跟着發生變化,如C1單元格有公式:=A1+B1
當將公式復制到C2單元格時變為:=A2+B2
當將公式復制到D1單元格時變為:=B1+C1 - 絕對引用:復制公式時地址不會跟着發生變化,如C1單元格有公式:=$A$1+$B$1
當將公式復制到C2單元格時仍為:=$A$1+$B$1
當將公式復制到D1單元格時仍為:=$A$1+$B$1 - 混合引用:復制公式時地址的部分內容跟着發生變化,如C1單元格有公式:=$A1+B$1
當將公式復制到C2單元格時變為:=$A2+B$1
當將公式復制到D1單元格時變為:=$A1+C$1
- 一句話總結,在Excel中移動公式位置,引用內容會跟着改變,如果加了$,則該部分不會改變
0X.02 column函數
column函數的作用:返回所選擇的某一個單元格的列數
column函數的語法:
=column(reference)
# 如果省略reference,則默認返回函數column所在單元格的列數。
0X.03 數組“{ }”
Excel用花括號“{}”來表示數組:
數組表示一類元素的集合:
例如有數組:{1,3,5},則有:
1 + {1,3,5} = {2,4,6}
三鍵:即加按shift+ctrl+enter三鍵
0X.04 IF函數
if函數的作用:根據判斷條件執行不同的語句,而且能配合很多函數共同工作(能嵌套)
- 官方說明:IF函數判斷是否滿足某個條件,如果滿足返回一個值,如果不滿足則返回另一個值
if函數的語法:
=IF(logical_test, value_if_true, [value_if_false])
# 例如:
# =IF(A1>60,及格,不及格)
# 如果A1單元格的數字大於60,則在當前單元格輸出“及格”,否則輸出“不及格”。
0X.05 if({0,1}) OR if({1,0}):
先前我們了解了數組的用法和IF函數的用法,一旦組合起了,立即就看不明白了。
但是只要我們清楚了兩者的用法其實還是很好理解的:
- 對數組的操作就是對數組的每一個元素分別進行操作,再將操作結果再次組成一個數組
- IF函數先判斷條件,然后根據結果的正誤返回不同的值
然后我們看下面的例子:
=IF(1,B2:B9,A2:A9)
# 表示返回 B2:B9
=IF(0,B2:B9,A2:A9)
# 表示返回 A2:A9
那么如果將條件變為一個數組{1,0}呢?
=IF({1,0},B2:B3,A2:A3)
# 函數先對數組的第一個元素'1'進行操作,返回結果 B2:B3
# 函數再對數組的第二個元素'0'進行操作,返回結果 A2:A3
# 然后將兩個返回結果再次組成一個數組,返回結果{B2:B3,A2:A3}
# {B2:B3,A2:A3} 既是區域A2:B3的逆向區域。
-
A2:B9
+---+---+ | a | 1 | | b | 2 | +---+---+
-
+---+---+ | 1 | a | | 2 | b | +---+---+