Excel情报局

用案例讲Excel

探索挖掘分享Excel实用技能
Super,Excel,Man
用1%的Excel基础搞定99%的职场难题

做一个超级实用的Excel公众号

Excel是门手艺玩转需要勇气
数万表格探索者聚集地

当我们面对Excel中一堆像“1-5”、“2-6”、“3-7”这样的文本型数字区间时,想要快速的找到它们的公共交集部分时,比如在C2单元格想要统计A列各区间的交集值,是否会感到无从下手?手动比对不仅效率低下,而且容易出错。

其实这个统计交集问题与我们初中与高中数学上的基本知识点相似,我们在Excel中解决类似的问题时,可以借鉴数学常识找到规律,进行公式的编写。

交集是由所有同时属于各个区间的元素组成的集合。对于若干个区间,逐一找出它们的公共部分即可。例如:区间[1,5],区间[2,6]、区间[3,7],它们的交集是[3,5],因为这是三个区间都包含的部分。我们可以将所有区间在数轴上表示出来,观察区间重叠的部分。重叠区域即为交集。如下图所示:

那么从数学角度出发,找交集的规律与诀窍是端点比较法
找出所有区间的左端点中的最大值,作为交集的左端点。找出所有区间的右端点中的最小值,作为交集的右端点。若最大左端点大于最小右端点,则交集为空集。


在本例中,所有的左端点为每个单元格中“-”左边的数字(1/2/3),左端点中的最大值为3;所有的右端点为每个单元格中“-”右边的数字(5/6/7),

右端点中的最小值为5,故交集为“3,4,5”。

接下来小编将总结一个“一步到位”的公式,它能瞬间解析多个文本区间,并自动计算出所有区间共有的数值,将结果整齐的列在单个单元格中。

这个公式的核心基于一个简洁而强大的逻辑

多个区间的交集,起始于所有起点中的最大值,终止于所有终点中的最小值。下面小编将深入拆解这个公式,看看它是如何将文本拆解、数值转换、极值计算与序列生成完美组合的。

第一阶段

获取区间的左端点中的最大值

使用TEXTBEFORE函数:

=TEXTBEFORE(A2:A4,”-“)

TEXTBEFORE函数提取A2:A4每个单元格字符串中短横线“-”之前的部分。结果是一个文本数组:
{“1″;”2″;”3”}

将上一步得到的文本数组乘以数字1:
=TEXTBEFORE(A2:A4,”-“)*1

这是一个常用的技巧,目的是将文本型数字强制转换为真正的数字。转换后得到数组:
{1;2;3}

这是三个区间的左端点集合。

MAX函数计算这个左端点数组中的最大值:

=MAX(TEXTBEFORE(A2:A4,”-“)*1)

MAX({1;2;3})的最大值结果是3。获取到了区间的左端点中的最大值3。


第二阶段
获取区间的右端点中的最小值

使用TEXTAFTER函数:

=TEXTAFTER(A2:A4,”-“)

TEXTAFTER函数提取A2:A4每个单元格字符串中短横线“-”之后的部分。结果是一个文本数组:
{“5″;”6″;”7”}

将上一步得到的文本数组乘以数字1:
=TEXTAFTER(A2:A4,”-“)*1

这是一个常用的技巧,目的是将文本型数字强制转换为真正的数字。转换后得到数组:
{5;6;7}

这是三个区间的右端点集合。

灵活的多区间交集统计,这个let公式让你准时下班

MIN函数计算这个右端点数组中的最小值:

=MIN(TEXTAFTER(A2:A4,”-“)*1)

MIN({5;6;7})的最小值结果是5。获取到了区间的右端点中的最小值5。


第三阶段
生成交集数组

使用到的是SEQUENCE函数:

=SEQUENCE(D2-C2+1,,C2)

通过前两个阶段的分析,我们已经知道了交集是“3、4、5”。
右端点最小值-左端点最大值+1
D2-C2+1
5-3+1=3
确定交集区间内包含3个数字元素。

SEQUENCE函数用于生成一个数字序列。
SEQUENCE(3,,3)
第一个参数:行数3表示生成一个3行的序列。
第二个参数:列数省略,默认为1,生成一列。
第三个参数:起始值为3,表示从3开始。
第四个参数:增量省略,默认生成1列3行的等差为1序列
结果生成一个垂直数组:{3;4;5}

使用ARRAYTOTEXT函数:

=ARRAYTOTEXT(SEQUENCE(D2-C2+1,,C2))

将上一步生成的数组转换成一个文本字符串。默认情况下,它会用逗号将数组元素连接起来并显示在一个单元格中。

此时我们虽然得到了最终的统计结果,但是借助了C列与D列的辅助列,所以我们需要合并公式,去掉辅助列,整理成一个公式。将C2的公式与D2的公式同时代入到SEQUENCE函数的参数中:

代入后:

=ARRAYTOTEXT(SEQUENCE(MIN(TEXTAFTER(A2:A4,”-“)*1)-MAX(TEXTBEFORE(A2:A4,”-“)*1)+1,,MAX(TEXTBEFORE(A2:A4,”-“)*1)))

虽然这个总公式已经完成了最终效果。但是公式的可读性不佳,初次观察该公式时不容易理解其逻辑。

第四阶段
提升公式可读性

我们可以借助LET函数设置变量,增加公式的可读性。

设置变量名称a、b、c以及其所代表的变量内容:

a=A2:A4
b=MAX(1*TEXTBEFORE(a,”-“))
c=MIN(1*TEXTAFTER(a,”-“))

变量计算逻辑式:
ARRAYTOTEXT(SEQUENCE(cb+1,,b))

最终总公式:

=LET(a,A2:A4,b,MAX(1*TEXTBEFORE(a,”-“)),c,MIN(1*TEXTAFTER(a,”-“)),ARRAYTOTEXT(SEQUENCE(c-b+1,,b)))
学习Excel/如果你没有天赋/那就一直重复/当你快到本能反应的时候/你的重复就是别人眼中的天赋/冲破捆绑/展翅翱翔/回顾关键内容/善用图片表达/学会建立联系/拓展深度广度/浓缩关键概念/应用到行动中/善于归纳总结/尝试进行分享

对单元格部分文字内容替换 格式更改

借助这个函数!合并工作表简直太好用

比vlookup还强大的动态随机查询

根据起始序号与终止序号写入内容

regexp正则提取:款式&尺码多组提取

一个关于人口普查Excel户籍整理的问题

一个关于人口普查Excel户籍整理的问题2

regexp+vlookup根据简称查询全称

regexp+countif+filter根据全称查找简称

excel1秒批处理1000条混乱时间数据

Regexp这个大哥级函数人狠话不多

公式里常出现的”@”、”#”、”.”是干啥的