需求:一个单元格里有n个组(每组包含:商品名称,数量),要把每种商品的数量提取出来放到对应的单元格
按流程先上最终效果图:
过程:有人说要用到宏,可是我是个菜鸟,之前没有接触过,短时间让我写一个,我搞不定,所以换个思路,Excel不是有很多函数么,那就函数嵌套好了,然后把步骤分解:
1.查找商品的下标:用FIND()函数
2.根据第1步的下标截取下标之后的字符串:用RIGHT()函数,计算字符串长度的时候用到了LEN()函数
3.计算第2步拿到字符串中空格的数量,分为等于0(A3数据)和大于0(A1数据)的情况,思路:
(LEN(B27)-LEN(SUBSTITUTE(B27," ","")))/LEN(" ")
4.判断第3步的空格数量,如果等于0结果则为第2步结果,如果大于0则先拿到第一个空格下标
截取字符串(第2步拿到的结果)0到第一个空格下标得到最终结果
下面针对A2进行步骤分解~~
1.FIND(B1,A2),得到的结果是 6
2.RIGHT(A2,LEN(A2)-FIND(B$1,A2)-9),得到的结果是 81245 商品名称:商品3 购买数量:1 商品名称:商品2 购买数量:1
3.(LEN(B27)-LEN(SUBSTITUTE(B27," ","")))/LEN(" "),得到的结果是 8
4.找空格下标:FIND(" ",B27)(B27是上步所在的单元格),得到的结果是 6
根据第3步结果判断:IF(B28>0,LEFT(B27,FIND(" ",B27)),B27),得到的结果是 81245
当然在过程中这样一步一步写太麻烦了,所以我们替换一下函数,得到最终函数:
IF((LEN(RIGHT($A2,LEN($A2)-FIND(B$1,$A2)-9))-LEN(SUBSTITUTE(RIGHT($A2,LEN($A2)-FIND(B$1,$A2)-9)," ","")))/LEN(" ")>0,LEFT(RIGHT($A2,LEN($A2)-FIND(B$1,$A2)-9),FIND(" ",RIGHT($A2,LEN($A2)-FIND(B$1,$A2)-9))),RIGHT($A2,LEN($A2)-FIND(B$1,$A2)-9))
不要晕,哈哈哈~~~
在B2中写入这个函数(前面要加上“=”),然后回车,得到一个数据,之后拖动区域得到全部,此时情况是这样的
发现有很多#VALUE,不要慌,选中全部,然后Ctrl+G定位,选择错误,
然后在任意错误的单元格,删掉函数,按Ctrl+Enter,这时候发现之前的错误没有了
完成。
重点标一个,计算一个字符串中某个字符出现次数的:(LEN(B27)-LEN(SUBSTITUTE(B27," ","")))/LEN(" ")
防止商品名称前几个字一样,比如 商品名称:商品1 购买数量:2 商品名称:商品11 购买数量:3
执行完后排下序,然后对于大于1的情况单独处理,因为当前这种情况遇到的很少,所以先更新到这里,以后用到的时候再来更新。