excel减法函数_Excel公式练习35: 拆分连字符分隔的数字并放置在同一列中
学习Excel技术,关注微信公众号:
excelperfect
导语:这个案例仍来自于excelxor.com,没有办法,太有才了,不得不佩服这些人,竟然能把Excel公式与函数玩成这个样子!认真研究这些案例,一定能够有效地提升我们的Excel公式应用技能。
本次的练习是:在单元格区域A1:A6中,有一些数据,有的是单独的数字,有的是由连字符分隔的一组数字,例如13-16表示13、14、15、16,现在需要将这些数据拆分并依次放置在列D中,如下图1所示。
图1
先不看答案,自已动手试一试。
公式
在单元格D1中输入数组公式:
=IF(ROWS($D$1:$D1)>SUM(last-first+1),"",SMALL(IF(first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1)>--last,"",first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1)),ROWS($D$1:$D1)))
向下拖拉至出现空单元格为止。
公式解析
公式中的first和last是定义的两个名称。
名称:first
引用位置:=LEFT(SUBSTITUTE($A$1:$A$6,"-",REPT("",5)),5)
名称:last
引用位置:=RIGHT(SUBSTITUTE($A$1:$A$6,"-",REPT("",5)),5)
我们来看看这两个名称是怎样运转的。第一个名称:first
=LEFT(SUBSTITUTE($A$1:$A$6,"-",REPT("",5)),5)
转换为:
=LEFT(SUBSTITUTE({“1-2”;”4-6”;”9”;”10-11”;”13-16”;”21”},"-",REPT("",5)),5)
转换为:
=LEFT(SUBSTITUTE({“1-2”;”4-6”;”9”;”10-11”;”13-16”;”21”},"-",“ ” ),5)
转换为:
=LEFT({“1 2”;”4 6”;”9”;”10 11”;”13 16”;”21”},5)
得到的结果为:
={“1 ”;”4 ”;”9”;”10 ”;”13 ”;”21”}
上面公式中的数字5是任意选的,只要能保证将数字筛选出来即可。
对于第二个名称:last。与上面的原理相同,最后得到的结果为:
={“ 2”;” 6”;”9”;” 11”;” 16”;”21”}
再来看公式中IF语句的第一部分:
IF(ROWS($D$1:$D1)>SUM(last-first+1),""
使用定义的名称替换公式相对应的名称位置:
IF(ROWS($D$1:$D1)>SUM({“ 2”;” 6”;”9”;” 11”;” 16”;”21”}-{“1 ”;”4 ”;”9”;”10 ”;”13 ”;”21”}+1),""
得到:
IF(ROWS($D$1:$D1)>SUM({2;3;1;2;4;1}),""
注意,这里没有必要对两个数组使用TRIM函数,Excel在进行数学减法运算时忽略数字前后的空格并强制转换成数学运算。
这样,我们可以看到上面的结果数组中对应于单元格A1:A6中每个数据要返回的数字个数,例如“1-2”将返回2个值、“4-6”将返回3个值,依此类推。因此,该数组的和就是我们想要返回的数字的总数:
IF(ROWS($D$1:$D1)>13,""
所以,向下复制公式时,超过13行将返回空值。
下面看看公式中的主要部分:
SMALL(IF(first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1)>--last,"",first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1)),ROWS($D$1:$D1))
可以看到,下面的部分出现了2次:
first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1)
其中,last-first在前面已经讲过,生成数组:
{1;2;0;1;3;0}
其最大值是3,然后加上1得到4,即:
MAX(last-first)+1
的结果是4。实际上,这个值代表我们从A1:A6的各字符串中范围最大的字符串返回的数字数量。
这样,就将上面的部分公式转换为:
first+TRANSPOSE(ROW(INDIRECT("1:"&4))-1)
转换为:
first+TRANSPOSE({1;2;3;4}-1)
得到:
first+{0,1,2,3}
这里是公式的关键技巧所在:首先生成一个单列数组,该数组由0至3(即数值范围的最大间隔)组成,然后将其转置为单行数组{0,1,2,3}。接着,将该数组与first生成的数组({“1 ”;”4 ”;”9”;”10 ”;”13 ”;”21”})相加。因为这两个相加的数组正交,一个6行1列的数组加上一个1行4列的数组,结果是一个6行4列的数组,有24个值。
这样,上面的部分公式转换为:
{“1 ”;”4 ”;”9”;”10 ”;”13 ”;”21”}+{0,1,2,3}
结果为:
{1,2,3,4;4,5,6,7;9,10,11,12;10,11,12,13;13,14,15,16;21,22,23,24}
这个数组包含我们想要的数值,但是也包含一些我们不想要的值。其实,之所以生成4列数组,是为了确保能够添加足够数量的整数,因为A1:A6中最大的间隔范围就是4个整数。
要去除不需要的数值,只需将上面数组中的每个值与last生成的数组相比较,(last数组生成的值为A1:A6中每个数值范围的上限)。例如对于上面数组中的第4行{10,11,12,13},在last数组中对应的值是11,因此剔除12和13,只保留10和11。公式中的比较部分为:
IF(first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1)>--last,""
转换为:
IF({1,2,3,4;4,5,6,7;9,10,11,12;10,11,12,13;13,14,15,16;21,22,23,24}>{2;6;9;11;16;21},""
Excel对公式中生成的两个数组在相同行中进行比较,例如,左边数组第2行的值{4,5,6,7}与右边数组第2行的值6进行比较、左边数组第5行的值{13,14,15,16}与右边数组第5行的值16进行比较,依此类推。得到的结果为:
IF({FALSE,FALSE,TRUE,TRUE;FALSE,FALSE,FALSE,TRUE;FALSE,TRUE,TRUE,TRUE;FALSE,FALSE,TRUE,TRUE;FALSE,FALSE,FALSE,FALSE;FALSE,TRUE,TRUE,TRUE},""
由上述的推导可知,公式中的IF语句:
IF(first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1)>--last,"",first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1))
可变为:
IF({FALSE,FALSE,TRUE,TRUE;FALSE,FALSE,FALSE,TRUE;FALSE,TRUE,TRUE,TRUE;FALSE,FALSE,TRUE,TRUE;FALSE,FALSE,FALSE,FALSE;FALSE,TRUE,TRUE,TRUE},"",{1,2,3,4;4,5,6,7;9,10,11,12;10,11,12,13;13,14,15,16;21,22,23,24})
转换为:
{1,2,"","";4,5,6,"";9,"","","";10,11,"","";13,14,15,16;21,"","",""}
此外,公式中的:
ROWS($D$1:$D1)
随着向下复制,得到1、2、3…等数字。
综上,在单元格D1中原来的公式:
=IF(ROWS($D$1:$D1)>SUM(last-first+1),"",SMALL(IF(first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1)>--last,"",first+TRANSPOSE(ROW(INDIRECT("1:"&MAX(last-first)+1))-1)),ROWS($D$1:$D1)))
转换为:
=IF(1>13,"",SMALL({1,2,"","";4,5,6,"";9,"","","";10,11,"","";13,14,15,16;21,"","",""}, 1))
结果是:
1
对于单元格D2中的公式转换为:
=IF(2>13,"",SMALL({1,2,"","";4,5,6,"";9,"","","";10,11,"","";13,14,15,16;21,"","",""}, 2))
结果是:
2
对于单元格D3中的公式转换为:
=IF(3>13,"",SMALL({1,2,"","";4,5,6,"";9,"","","";10,11,"","";13,14,15,16;21,"","",""}, 3))
结果是:
4
…… 依此类推。
厉害吧!
excel减法函数_Excel公式练习35: 拆分连字符分隔的数字并放置在同一列中相关推荐
- excel减法函数_excel减法公式怎样设置
excel已经成为办公必备软件,用来统计数据.展现统计结果,是一款非常简练.方便的办公软件.使用过程中常常用到公式,比较常见的是加减乘除及混合运算.那么excel减法公式怎样设置,下面就为大家介绍一下 ...
- excel减法函数_excel中常用的日期函数
5个日期函数,不用看着日历数日子 1.算天数 包括算年龄.算工龄,算倒计时,算工作天数等,甚至各种花式放假情况下的工作天数,比如每周一周三周五休假,算每月的工作天数 算年龄,先把身份证上的出生日期提取 ...
- excel减法函数_Excel基础知识-四则运算(函数篇)
在excel电子表格的使用,各种的报表的绘制都离不开四则运算,而符号运算符在我们平常中使用的最多,不过近日却发现了符号运算符的一些小的缺点,繁琐的操作,兼容性不是太好,为了使规避这些的问题,就用到了函 ...
- excel减法函数_Excel中的时间与日期计算的那些事,懂了这个原理你会感觉很简单...
#excel##excel教程##办公软件##我要上头条# 这是一个可以获取知识的头条号--云端网校教程. 大家好,今天给大家介绍的是一个非常重要的理论型知识,关于时间与日期.如果是办公财务人员或者计 ...
- excel减法函数_Excel教程:最常用的SUM函数送给你【收藏版】
助力春季就业,越努力越幸运 特推超级会员限时疯狂抢购 点击了解 支持微信公众号+小程序+APP+PC网站多平台学习 SUM函数作为Excel办公软件常用求和之一,可以说我们最早接触的求和函数就是它,相 ...
- excel减法函数_excel日期函数:如何计算项目的开始和完成日期
编按:哈喽,大家好!在上一篇文章中,我们说到了EDATE.DATEDIF.EOMONTH.WEEKDAY等日期函数,相信大家对于excel中的日期计算,已经有了一个大致的了解,今天我们继续上篇内容,为 ...
- 计算机中的乘法函数公式,教程方法;excel乘法函数_excel乘法公式电脑技巧-琪琪词资源网...
琪琪词资源网-教程方法;excel乘法函数_excel乘法公式电脑技巧,以下是给大家带来的教程方法;excel乘法函数_excel乘法公式,大家可以了解一下哦! excel乘法函数 Excel中经常会 ...
- 计算机考试减法公式,Excel减法函数公式
根据网友提出的"错位减法的Excel减法公式"等问题,Excel办公网整理了一些著名网站上关于"错位减法的Excel减法公式"的信息 标题: 求等比数列前n项之 ...
- 用计算机如何使用减法,excel减法函数怎么用使用教程
excel中函数是最强大同时又比较复杂的功能,在很多复杂或者批量计算和统计中非常重要.很多用户表示不会使用excel的减法函数,其实excel的减法函数并不难,今天小编给大家讲讲excel减法函数的使 ...
最新文章
- 是北京晚报!不,是中国最大的讽刺!!!
- 如何升级jdk_简述面试常见问题的锁升级与锁优化
- tableau应用实战案例(一)-如何通过Tableau绘制小提琴图
- python多进程关闭socket_用Python制作一个多进程UDP服务器,一个进程监听一个p
- gSoap客户端调用WebService完成后注意内存释放顺序
- 系统syslog网络转发配置
- 创建可扩展性系统-13-2
- 【译】Matplotlib:plotting
- mysql8 连接不上数据库_MySQL升级8.0后连接不上数据库
- 今日分享idea精彩好看的主题+网站地址
- html字体样式微软雅黑,Css样式表中实现微软雅黑字体
- Python实现高斯滤波
- 双目三维重建:双目摄像头实现双目测距(Python)
- 蓝桥杯学习笔记十:PWM占空比测量实验
- 介绍一个直接浏览微软知识库文章的工具
- 计算机网络网络层之虚电路网络
- 查看MySQL数据库的命令
- 7.16 两行代码实现全选checkAll
- 基于vs插件的abp代码生成器
- 罗马音平假名中文可复制_韩语入门,认识韩语四十音,学唱韩语歌曲