这是很早以前发表在博客上的一篇旧文,简化了原来的公式。
需求:
产品名称中包含了某类信息,比如品牌、规格、型号等,已经定义了基础的品牌分类,但产品名称会有变化(品牌关键字不会变)。要求在输入产品名称的时候,自动带出品牌
思路:
1、在产品名称中查找品牌名称,用search函数,包含品牌名称则返回位置值;
2、找出1所对应的品牌名称,用lookup函数;
解决:
1、准备两张表:产品登记表,用来登记产品,品牌名称表,用来登记维护品牌名称;
2、在品牌名称表中A列填写具体的品牌名称,定义名称pinpai,公式=OFFSET(品牌名称表!$A$1,1,,COUNTA(品牌名称表!$A:$A)-1,1),要求添加品牌时要连续,不要留空单元格,可以动态更新名称的引用区域。
3、表样
(1)产品登记表
(2)品牌名称表
附:公式解读
一、定义动态列表名称【=OFFSET(品牌名称表!$A$1,1,,COUNTA(品牌名称表!$A:$A)-1,1)】
1、OFFSET(reference, rows, cols, [height], [width]):返回对单元格或单元格区域中指定行数和列数的区域的引用。 返回的引用可以是单个单元格或单元格区域。 可以指定要返回的行数和列数。
――在这里:用来取得品牌列表区域引用
2、COUNTA 函数计算范围中不为空的单元格的个数。
――在这里:用来实现对名称区域的动态引用,顺序增加时能自动更新引用
二、取品牌名称公式【=IF(A2="","",LOOKUP(9^9,SEARCH(pinpai,A2),pinpai))】
1、=IF(Something is True, then do something, otherwise do something else),判断条件为真,则执行随后的公式、命令,条件为假则执行最后面的公式、命令。
――在这里:用来隐藏错误值,如果A列没有输入产品名称,则显示为空。这种用法非常广泛。
2、LOOKUP(lookup_value, lookup_vector, [result_vector]),在单行区域或单列区域(称为“向量”)中查找值,然后返回第二个单行区域或单列区域中相同位置的值。
如果LOOKUP函数找不到lookup_value,则该函数会与lookup_vector中小于或等于lookup_value的最大值进行匹配。
如果lookup_value小于lookup_vector中的最小值,则LOOKUP会返回 #N/A 错误值。
――在这里:用来查找对应品牌名称,9^9表示一个极大的数值,确保能在后的查找范围中找到比它小的值。
3、SEARCH(find_text,within_text,[start_num]):可在第二个文本字符串中查找第一个文本字符串,并返回第一个文本字符串的起始位置的编号,该编号从第二个文本字符串的第一个字符算起。
――在这里:用来查找A列的产品名称中是否包含品牌名称,有则显示在该单格内字符位置值,是一个数值,没有则显示错误值#VALUE!
网友评论