excel公式技巧: 获取指定区域中2个及以上连续数值并按顺序排列
发布时间:2023-08-07 08:24:25
给定单元格区域A1:D5(其中每个单元格中都是整数,并且在该单元格区域内是唯一的),使用单个公式生成一个数组,该数组由该区域中所有连续的数值组成,连续的数值至少包含两个,且返回的数组中的元素按从小到大的顺序排列。
图1
也就是说,可以返回结果:
{1;2;3;12;13;14;15;16;17;36;37}
也可以返回结果:
{1,2,3,12,13,14,15,16,17,36,37}
注意,所给出的公式应包含最少的字符;在公式中必须同时包含行列引用,不允许全是列引用(如A:D)或行引用(如1:5);公式中不允许使用名称。
先不看答案,自已动手试一试。
公式
公式1:
=MODE.MULT(SMALL(A1:D5,ROW(A1:A20)),IF(COUNTIF(A1:D5,A1:D5+1)+COUNTIF(A1:D5,A1:D5-1),A1:D5))
使用了91个字符。
公式2:
=MODE.MULT(IFERROR(SMALL(IF(COUNTIF(A1:D5,A1:D5+1)+COUNTIF(A1:D5,A1:D5-1),A1:D5),ROW(A1:A20))*{1,1},””))
使用了103个字符。
尝试通过同时评估两个COUNTIF构造来缩短此公式构造-并消除了对IFERROR子句的需要,但最终比上述公式稍长一些,有105字符,即公式3:
=MODE.MULT(IF(MMULT(COUNTIF(A1:D5,SMALL(A1:D5,ROW(A1:A20))-{1,-1}),{1;1}),{1,1}*SMALL(A1:D5,ROW(A1:A20))))
或者公式4:
=MODE.MULT(IF(MMULT(COUNTIF(A1:D5,SMALL(A1:D5,ROW(A1:A20))-{1,-1}),{1;1}),SMALL(A1:D5,ROW(A1:A20))),A1:D5)
公式解析
由于我们想要从所给区域中返回一个数组,该数组由区域内至少两个连续的数值构成,因此,执行此操作的一种方法是针对区域内的每个值检查是否在该区域内还会发现比该值大1或小1的值。
这样,我们需要查看下面两种构造的结果:
COUNTIF(A1:D5,A1:D5+1)
和
COUNTIF(A1:D5,A1:D5-1)
由于我们要求对于每个值,其两个返回值中只有一个为非零值即可,因此可以通过简单地将上述构造加在一起,这等价于OR操作。于是,公式中的:
COUNTIF(A1:D5,A1:D5+1)+COUNTIF(A1:D5,A1:D5-1)
转换为:
{0,0,1,0;0,0,0,0;1,1,0,1;1,0,1,1;1,0,0,0}+{0,1,1,0;0,0,0,1;0,1,1,1;1,0,0,0;1,0,0,0}
结果为:
{0,1,2,0;0,0,0,1;1,2,1,2;2,0,1,1;2,0,0,0}
从中可以看出,元素0表示:在区域中未找到比要查找的值大1或小1的值。同样,元素1表示:在区域中找到了比要查找的值大1或小1的值。值2表示在区域中找到了比要查找的值大1的值和小1的值。因此:
IF(COUNTIF(A1:D5,A1:D5+1)+COUNTIF(A1:D5,A1:D5-1),A1:D5)
转换为:
IF({0,1,2,0;0,0,0,1;1,2,1,2;2,0,1,1;2,0,0,0},A1:D5)
得到:
{FALSE,17,14,FALSE;FALSE,FALSE,FALSE,37;12,15,3,2;13,FALSE,1,36;16,FALSE,FALSE,FALSE}
现在,我们已经生成了所需的值。但是,仍然存在两项工作要解决:按升序对它们进行排序以及删除任何非数字元素。
使用SMALL函数来完成排序操作:
SMALL(IF(COUNTIF(A1:D5,A1:D5+1)+COUNTIF(A1:D5,A1:D5-1),A1:D5),ROW(A1:A20))
转换为:
SMALL({FALSE,17,14,FALSE;FALSE,FALSE,FALSE,37;12,15,3,2;13,FALSE,1,36;16,FALSE,FALSE,FALSE},ROW(A1:A20))
转换为:
SMALL({FALSE,17,14,FALSE;FALSE,FALSE,FALSE,37;12,15,3,2;13,FALSE,1,36;16,FALSE,FALSE,FALSE},{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20})
结果为:
{1;2;3;12;13;14;15;16;17;36;37;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!}
通常,我们可能试图通过构造一个合适的数组传递给SMALL函数作为其参数k的值来缩小数组,然而,这里使用了MODE.MULT函数,更简洁。注意,这里使用的缩小数组的技术,当我们希望返回的元素在被处理的数组中出现的频率相等时才合适。此外,该频率必须至少为两倍,因为如果没有一个以上的值出现,那么MODE.MULT不会返回任何值。
因此,先与数组{1,1}相乘的原因是,当我们将SMALL构造(一个20行1列的数组)与数组{1,1}(一个1行2列的数组)相乘时,生成20行2列的数组,其每行中列的元素都是相同的。这样:
SMALL(IF(COUNTIF(A1:D5,A1:D5+1)+COUNTIF(A1:D5,A1:D5-1),A1:D5),ROW(A1:A20))*{1,1}
转换为:
{1;2;3;12;13;14;15;16;17;36;37;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!;#NUM!}*{1,1}
结果为:
{1,1;2,2;3,3;12,12;13,13;14,14;15,15;16,16;17,17;36,36;37,37;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!}
可以看出,我们已经成功地使每个元素的数量简单地翻了一倍,现在可以安全地将其传递给MODE.MULT函数。但是,我们先要消除这些错误值。像绝大多数函数一样,MODE.MULT函数不会处理包含此类错误值的数组。
这样,公式中的:
IFERROR(SMALL(IF(COUNTIF(A1:D5,A1:D5+1)+COUNTIF(A1:D5,A1:D5-1),A1:D5),ROW(A1:A20))*{1,1},””)
转换为:
IFERROR({1,1;2,2;3,3;12,12;13,13;14,14;15,15;16,16;17,17;36,36;37,37;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!;#NUM!,#NUM!},””)
得到:
{1,1;2,2;3,3;12,12;13,13;14,14;15,15;16,16;17,17;36,36;37,37;””,””;””,””;””,””;””,””;””,””;””,””;””,””;””,””;””,””}
最后,将其传递给MODE.MULT函数:
MODE.MULT(IFERROR(SMALL(IF(COUNTIF(A1:D5,A1:D5+1)+COUNTIF(A1:D5,A1:D5-1),A1:D5),ROW(A1:A20))*{1,1},””))
转换为:
MODE.MULT({1,1;2,2;3,3;12,12;13,13;14,14;15,15;16,16;17,17;36,36;37,37;””,””;””,””;””,””;””,””;””,””;””,””;””,””;””,””;””,””})
得到:
{1;2;3;12;13;14;15;16;17;36;37}
小结
MODE.MULT函数的妙用!


猜你喜欢
- WiFi共享精灵目前有很多用户在使用,同时有不少Win10系统的用户,在使用WiFi共享精灵的时候碰到突然停止工作的情况。然后就把它给卸载了
- 安装旧版软件的两种方法方法一:适用系统版本:iOS8 - iOS9iPhone 成功连接至 PC 端爱思助手,根据自己当前的系统版本选择一键
- 许多朋友在制作一些数据表格的时候经常会用到公式运算,其中包括了将多个表格中的数据相加求和,或者是批量将多个表格相加求得出数据结果。不太明白的
- excel突然无法输入内容的解决办法:1、Excel表格被设置保护,如果其他的表格可以打字只是这份表格不可以的话,查是否是先前有设定了[锁定
- 小伙伴们在日常办公时,应该看到或一种图表,就是点击某个同学或者是员工的姓名,就可以以查看他的相关信息了。其实,这里主要是使用了切片器功能,切
- 如果你使用WPS 2009编辑文档,当收到一份带有水印的Word文档,并且需要去除水印时,那么该如何操作呢?其实方法很简单。依次单击“视图→
- 佩戴 Apple Watch 后,可以直接通过手表和蓝牙耳机收听音乐而无需 iPhone,Apple Watch Series 3
- 神舟战神Z8-DA7NT是一款游戏影音笔记本电脑,这款电脑搭载了英特尔酷睿i7处理器以及发烧级独立显卡,能够满足用户们日常娱乐使用需求,那么
- 在excel表格函数的运用中,“IF"函数我们经常用到,往往我们用”IF“判读多个条件时,运用的是多级嵌套的方式。然而,我们需要多
- 对于一些经常玩游戏的用户来说,电脑配置能不能带动游戏很重要,那很多更新win10 20H2的用户说自己的高配电脑在更新之后出现游戏卡顿的问题
- winrar怎么打开保留压缩文件历史记录?现在有很多小伙伴都在使用winrar压缩软件,它能够解压缩多种格式的文件,那么有小伙伴知道winr
- 先在A电脑上安装一下B电脑打印机的驱动程序,再打开需要打印的Excel工作簿,调出“打印机”选择对话框,将打印机设置成B电脑上的打印机,然后
- 当我们将操作系统升级到win102004时,一些小的合作伙伴可能会遇到win10404系统的资源管理器持续重启而无法进入桌面的情况。对于这类
- 现在,因为我们科学技术的发展,电脑中的各种软件变得更加多样,而且功能也是一个比一个强大,除了我们在平时常用的娱乐软件之外,还有各种各样的办公
- win10系统以其稳定性和良好的兼容性一直深受大家的喜爱,很多小伙伴但是不知道win10系统U盘安装教程,今天小编带来了下载的方式及其下载安
- 在PowerPoint演示文稿中制作PPT时我们可以绘制各种想要的形状,比如我们可以绘制一些线条,矩形,箭头,流程图,星星,旗帜,标注,动作
- PPT怎么插入网页内容?ppt中想直接插入一个网页的内容,该怎么插入呢?现在ppt有一个一键在ppt里插入网页内容的加载项,可以加载使用,下
- windowsxp系统会自动启动很多服务程序,而其中存在一些危险服务程序。那么,要如何有效地设置禁用xp系统的危险服务程序呢?下面脚本之家的
- 脱机状态就是电脑没有连接到网络,通常是在浏览器打开后,浏览器没有连接到网络,浏览器会默认用脱机浏览(离开网络浏览)因为你平时浏览过的网页会储
- 大家在使用打印机的使用,需要注意设置正确的打印机属性参数,不当的打印机属性参数可能会导致打印乱码故障的发生,甚至导致打印机无法工作。例如,对