在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
凡注有"天津滨海网"或电头为"天津滨海网"的稿件,均为天津滨海网独家版权所有,未经许可不得转载或镜像;授权转载必须注明来源为"天津滨海网",并保留"天津滨海网"的电头。