excel公式教程:拆分连字符分隔的数字并放置在同一列中

excel公式教程:拆分连字符分隔的数字并放置在同一列中

浏览次数:883次
信息来源: 银河系资源网
更新日期: 2022-05-06
文章简介

在单元格区域A1:A6中,有一些数据,有的是单独的数字,有的是由连字符分隔的一组数字,例如13-16表示13、14、15、16,现在需要将这些数据拆分并依次放置在列D中,如下图1所示。图1先不看答案,自已动手试一试。公式在...

在单元格区域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公式教程:找到和的加数
下一篇 »
  • 如何计算同一单元格中的Excel数据的公式和?
    750422阅读
    在某些表格中,我们需要将所有数据输入到一个单元格中来计算公式,而通用公式是在不同的单元格中计算的。我们应该如何计算这种情况?在这里,小王先生将与大家分享几种常用的方法。1.用户定义的名称首先,输入公式定...
  • 按日期记录的产品销量,SUMIFS帮你按月统计
    703266阅读
    今天,朋友传来EXCEL文件,内有两张工作表,一张是按照日期记录的商品销量,另一张是按月统计的模板,请帮忙统计每种产品的月销量。商品销量记录表:按月统计的模板:关键操作第一步:TEXT函数建立辅助列在日期列前插...
  • excel从字符串中提取数字——数字位于字符串开头
    280901阅读
    本文主要研究从字符串开头提取数字的技术:1. 这些数字是连续的2. 这些连续的数字位于字符串的开头3. 想要的结果是将这些连续的数字返回到单个单元格对于下面研究的每种解决方案,我们需要在两种不同的情况下测试其健...
  • excel按类别分页打印,有时需要强制
    129530阅读
    今天,就有位朋友提出一个很实用的问题:有时候需要按照类别打印,比如以下数据样表,需要按地区分页打印:怎么办?两种方法:一、筛选后打印这种方法,可能大家都会用到:先按照不同地区筛选,筛选一次打印一次。如...
  • Excel表格日期公式和快捷技巧教程
    100548阅读
    Excel表格日期公式和快捷技巧教程1.excel日期的快捷键方法。首先,让我们介绍快捷键的方法(不需要公式)。方法很简单,在细胞里,同时按两个快捷键:Ctrl你可以得到当前日期。注意:1)不需要输入号码。2)其中;在英文...
  • excel公式教程:找到和的加数
    79916阅读
    有时候,我们给出一个目标值,想要知道这个值是已经提供的一系列值中哪几个值的和。如下图1所示,在单元格A2中给出了目标值47,在单元格C1:K1中有9个值,现在我们想知道这些值中哪些值相加等于47,在这些值的下方单元...
  • Excel中F8键的妙用
    47122阅读
    键盘上的键有什么用呢?今天我们一起来看看键在excel表中能发挥什么作用呢?1、使用F8键的功能选取单元格区域:比如:我要选中区域B2:D7这还不简单啊,直接用鼠标选取就行啦,对,没错,但是除了使用鼠标直接选取外,...
  • Excel中Rank函数排名
    31325阅读
    EXCEL中有一个很神奇的函数“RANK”,他能够将数字的排名单独显示在另一列,而且可以去除重名次。所显示的结果是有多少人就显示多少名。下面小编就来与大家分享一下,希望对大家有点帮助。1.返回一列数字的数字排位。...
  • “Excel批处理”成批修改文件名 以帮助您组织文件!
    30956阅读
    操作方法步骤1:首先定义名称,引用位置是[=FILES(‘D:\ my folder \ *。docx ‘)];自己设置驱动器号路径!查看您需要组织文件夹的位置,并设置它!然后,在单元格A1中输入[=INDEX(名称,行(A1))]的引...
  • Excel一学就会的饼图制作技巧
    19981阅读
    如何用饼图来展示任务完成百分比。先看效果:要实现这样的效果,其实很简单,接下来咱们就看看具体的操作过程:步骤1 准备数据源B1单元格中输入完成率,B2单元格中输入公式计算剩余量:=1-B1步骤2 插入饼图步骤3 设置...

如本文对您有帮助,随意赞赏一下!