excel函数是处理数据化问题的一个利器,在了解常用函数的基础用法后,面对实际问题时更需要的是合理地拆解问题、选择嵌套使用的函数。下面我们针对实际问题,重点讲解下问题分析的思路,以及如何选择函数。
写在前面:解题中用到的函数match、index、mid、ifna,以及通配符*。
一、问题背景:某天,老西儿收到如下一个数据表格(下图是其中的一部分)。表格中显示的是多个产品的具体参数,但是数据混在一起,仔细检查发现有如下两个问题:1. 参数位置错乱,同一行中,信息没有显示在对应的标签下;2. 重复显示了标签信息,如定位功能,标签下只需要显示”是/否“即可,表格中重复显示了标签信息;3. 有不属于标签内容的信息(如保修期),或有空值。怎么优化这个表格呢?
二、问题:如何使对应的信息显示在对应的标签下?
三、问题分析:
1. 明确问题要做什么,并将问题转换为系统可执行的描述。
问题1:将对应的内容显示在对应标签下(系统看不懂)
转换描述:在每一行中找到包含“定位”的信息,并将信息显示在同一行定位的标签下。“防爆”“显示屏”“电池容量”三个标签下的信息与此相同。
问题2:重复显示了标签内容(系统看不懂)
转换描述:找到的信息中,只需显示标签以后(或":"以后)的信息即可。
问题3:有不属于标签内容的信息(如保修期),或有空值(系统看不懂)
转换描述:如果不相关或为空值,需要进行特殊处理。
根据以上问题,我们对表格进行了扩充,增加了新的数据显示区域。
2. 根据转换后的描述确定函数
① 从单元格区域中取出某个单元格内的内容,想到index函数;
index(要引用的区域,返回的是区域中的第几行,[返回的是区域中的第几列])。用处:返回选定行列的单元格内的内容。
② 以“定位”为例,由于包含定位的信息在不同行中的位置不固定,因此需要在同一行中查找“定位”,以确定在改行的第几列。在一行的单元格中查找固定的内容,并确定位置,想到match函数;另,由于查找值除“定位”两个字外,前后还有内容,因此想到通配符*,查找的内容写为“*定位*”。
因此函数结构可写为=index(一行区域,1,match("*定位*",一行区域,0))
1. match(要查找的值,要查找的区域,[查找的类型])。用处:在一行或一列单元格中查找,并返回查找值所在单元格的位置,返回数值。第二项必须为一行或一列;第三项为0时表示精确查找。
2. 通配符*,表示任意多个字符。*定位*,表示查找包含“定位”两个字的内容。
③ 针对信息包含了标签的问题,仔细查看可以发现规律。以“定位”为例,所有包含“定位”的信息结构是:“是否可定位:X”,前面是固定的6个字符,我们需要的是第7个(及以后)的字符。从字符串中截取,想到mid函数。
函数结构可增加为=mid(index(一行区域,1,match("*定位*",一行区域,0)),7,2)。最后的2表示返回两个字符。
mid(要被截取的字符,从第几位开始,截取几位)
④ 经过前三步,函数的主体就完成了。考虑到会有无关的信息或空值,可能会存在在一行中找不到值的错误“#N/A”,因此想到用ifna函数,对出现NA错误的区域进行处理。
因此,最后的函数结构可以确定为=ifna(mid(index(一行区域,1,match("*定位*",一行区域,0)),7,2),"")
ifna(求值公式,出现NA错误时显示的值)
#N/A:"值不可用"错误,表示某个值对于该公式或函数不可用。
注:以上以“定位”为例,防爆等标签与上述内容类似,只是在mid函数截取时,起始的字符和要截取的长度不同。
重复以上步骤,就可以将新的数据整理到右边的区域中。对于该问题,换用不同的解法也能达成该需求,欢迎讨论。
喜欢可以点赞鼓励一下老西儿,后面还会逐步分享一些更复杂的操作,以及excel常用函数,以及PPT、Word等办公软件使用中的一些提升生产效率的小技巧。