在Excel 中Vlookup函數是很常用到的用於匹配數據的函數。
今天我們要更進一步地學習它的進階用法。
如下圖所示:
我們在左側黃色單元格分別輸入查詢編號,商場號,是否促銷
來獲得左下的商品編號,商品名稱,價格
在本例中主要使用VLOOKUP函數來實現
具體步驟如下:
在左下側B7單元格輸入=B2B8單元格輸入=VLOOKUP(B7,INDIRECT($B$3),2,0)B9單元格輸入=VLOOKUP(B7,INDIRECT($B$3),$C$4,0)C4單元格輸入=IF(B4="是",3,4),這裡C4單元格的取值由B4單元格的值來決定的當為4時C4就是3否則是4。這樣就可以通過是、否促銷來改價格了。在B3單元格設置數據有效性
6. 在B4單元格設置數據有效性
這裡具體說下INDIRECT($B$3)
這裡的INDIRECT($B$3)等效於三張表的A:D
當B3單元格是store_28時對應的是28商場的表的A:D的區域,store_28是通過菜單中的公式——定義名稱來定義的。如下圖所示:
當$B$3單元格變為store_16 時數據源就是16商場的數據了
INDIRECT($B$3)作用是隨著B3的變化將相應的數據源引用提取出來。
我們來看下使不使用INDIRECT() 的差別:
如:
B8單元格輸入=VLOOKUP(B7,INDIRECT($B$3),2,0)
B7=20944
B3=store_28
等效:
=VLOOKUP(20944,'28'!$A:$D,2,0) 。
而
B8單元格輸入=VLOOKUP(B7,$B$3,2,0)
B7=20944
B3=store_28
等效:
=VLOOKUP(20944,「store_28」,2,0) ,這樣就會出錯「store_28」不是一個數據區域而是一個字符,通過INDIRECT(「store_28」)能將其解析出'28'!$A:$D 區域。
通過本例的學習我們能夠掌握通過更加靈活的改變VLOOKUP()函數中的各個參數動態的獲取我們所需要的結果。本例僅為大家提供一個思路,事實上這樣的靈活拓展可以在更多的函數和更的工作實例中應用。希望本節講解對大家在工作實際中能有所幫助和啟發。
更多作者文章
EXCEL 的分行使用技巧
在Excel中如何根據日期動態改變可編輯區域?
如何讓電腦自動幫你列印文檔
如何使用EXCEL 製作動態密碼登入窗體
附:VLOOKUP()、INDIRECT()、IF() 的語法:
語法:
VLOOKUP函數:
VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
VLOOKUP 函數語法具有下列參數 (參數:為操作、事件、方法、屬性、函數或過程提供信息的值。):
lookup_value 必需。要在表格或區域的第一列中搜索的值。lookup_value 參數可以是值或引用。如果為 lookup_value 參數提供的值小於 table_array 參數第一列中的最小值,則 VLOOKUP 將返回錯誤值 #N/A。table_array 必需。包含數據的單元格區域。可以使用對區域(例如,A2:D8)或區域名稱的引用。table_array 第一列中的值是由 lookup_value 搜索的值。這些值可以是文本、數字或邏輯值。文本不區分大小寫。col_index_num 必需。table_array 參數中必須返回的匹配值的列號。col_index_num 參數為 1 時,返回 table_array 第一列中的值;col_index_num 為 2 時,返回 table_array 第二列中的值,依此類推。如果 col_index_num 參數:小於 1,則 VLOOKUP 返回錯誤值 #VALUE!。大於 table_array 的列數,則 VLOOKUP 返回錯誤值 #REF!。range_lookup 可選。一個邏輯值,指定希望 VLOOKUP 查找精確匹配值還是近似匹配值:如果 range_lookup 為 TRUE 或被省略,則返回精確匹配值或近似匹配值。如果找不到精確匹配值,則返回小於 lookup_value 的最大值。要點 如果 range_lookup 為 TRUE 或被省略,則必須按升序排列 table_array 第一列中的值;否則,VLOOKUP 可能無法返回正確的值。有關詳細信息,請參閱對區域或表中的數據進行排序。如果 range_lookup 為 FALSE,則不需要對 table_array 第一列中的值進行排序。如果 range_lookup 參數為 FALSE,VLOOKUP 將只查找精確匹配值。如果 table_array 的第一列中有兩個或更多值與 lookup_value 匹配,則使用第一個找到的值。如果找不到精確匹配值,則返回錯誤值 #N/A。
INDIRECT函數:
INDIRECT(ref_text, [a1])
INDIRECT 函數語法具有以下參數 (參數:為操作、事件、方法、屬性、函數或過程提供信息的值。):
Ref_text 必需。對單元格的引用,此單元格包含 A1 樣式的引用、R1C1 樣式的引用、定義為引用的名稱或對作為文本字符串的單元格的引用。如果 ref_text 不是合法的單元格的引用,函數 INDIRECT 返回錯誤值 #REF! 。如果 ref_text 是對另一個工作簿的引用(外部引用),則那個工作簿必須被打開。如果源工作簿沒有打開,函數 INDIRECT 返回錯誤值 #REF! 。如果 ref_text 引用的單元格區域超出行限制 1,048,576 或列限制 16,384 (XFD),則 INDIRECT 返回 #REF! 錯誤。 注釋 此行為不同於 Microsoft Office Excel 2007 之前的 Excel 版本,早期的版本會忽略超出的限制並返回一個值。A1 可選。一個邏輯值,用於指定包含在單元格 ref_text 中的引用的類型。如果 a1 為 TRUE 或省略,ref_text 被解釋為 A1-樣式的引用。如果 a1 為 FALSE,則將 ref_text 解釋為 R1C1 樣式的引用。
IF函數:
IF(logical_test, [value_if_true], [value_if_false])
IF 函數語法具有下列參數 (參數:為操作、事件、方法、屬性、函數或過程提供信息的值。):
logical_test 必需。計算結果可能為 TRUE 或 FALSE 的任意值或表達式。例如,A10=100 就是一個邏輯表達式;如果單元格 A10 中的值等於 100,表達式的計算結果為 TRUE;否則為 FALSE。此參數可使用任何比較運算符。value_if_true 可選。logical_test 參數的計算結果為 TRUE 時所要返回的值。例如,如果此參數的值為文本字符串「預算內」,並且 logical_test 參數的計算結果為 TRUE,則 IF 函數返回文本「預算內」。如果 logical_test 的計算結果為 TRUE,並且省略 value_if_true 參數(即 logical_test 參數後僅跟一個逗號),IF 函數將返回 0(零)。若要顯示單詞 TRUE,請對 value_if_true 參數使用邏輯值 TRUE。value_if_false 可選。logical_test 參數的計算結果為 FALSE 時所要返回的值。例如,如果此參數的值為文本字符串「超出預算」,並且 logical_test 參數的計算結果為 FALSE,則 IF 函數返回文本「超出預算」。如果 logic