|
所有数据都被硬塞进了一个单元格,就像下面这张图里的A3单元格:
——”c18,b9,c6,b1,a6,d1,a12″
每个单元格都是由“字母+数字”组成的编码,我们需要让它们先按字母从A到Z排列,紧接着;在相同字母的组内,数字部分也必须严格按照数值大小升序排列。在传统表格操作中:如果按照笨办法,你需要“分列”拆分、处理文本型数字、多列排序、最后再合并……步骤繁琐,极易出错。
这看似简单,实则是一个经典的Excel排序难题,或者你压根就不知道该怎么下手!
今天,小编只给你总结出一个实用的公式,就能让这个“字母优先,数字随后”的智能排序过程变的一气呵成。
通过文本分拆、分层排序、重组文本,巧妙的将多个新函数组合,实现了复杂的逻辑。下面小编将公式拆解为五个核心步骤,具体讲解其作用原理。
=TEXTSPLIT(A3,,”,”)
TEXTSPLIT函数以逗号为(行)分隔符,将A3的内容拆分成垂直数组。
使用REGEXP正则公式提取模式:
=REGEXP(TEXTSPLIT(A3,,”,”),{“[A-z]+”,”d+”})
花括号括起来,作为数组的两个元素:{“[A-z]+”,”d+”}:
省略REGEXP函数第3参数,默认正则为“提取”模式。
REGEXP函数对每个元素,用正则表达式分别提取“字母部分”和“数字部分”,生成一个两列的数组。
=LET(a,
REGEXP(TEXTSPLIT(A3,,”,”),{“[A-z]+”,”d+”}),
a参与的计算规则待定)
外层的LET函数让公式结构更清晰,将中间结果定义为变量a,可反复调用,避免了重复计算,也提升了可读性。
最后就是需要确定第3参数,即a需要参与的计算规则。
a需要参与的计算规则,可以概括为“双层排序”。对数组a进行排序,设定两个排序条件:
①即按照a的第1列(字母列)作为主要关键字升序排序,确保字母相同的数据分组放在一起,并按升序排序;
②然后以a第2列(数字列)作为次要关键字升序排序,确保字母相同的数据分组内数字也按升序排序。
第三步:执行双层排序
=LET(a,REGEXP(TEXTSPLIT(A3,,”,”),{“[A-z]+”,”d+”}),SORTBY(a,TAKE(a,,1),1))
=LET(a,REGEXP(TEXTSPLIT(A3,,”,”),{“[A-z]+”,”d+”}),SORTBY(a,TAKE(a,,1),1,–TAKE(a,,-1),1))
取数组a的最后1列(数字列),–将其强制转换为数值。这是正确排序数字的关键(如 12>6),否则会按文本排序(“12″<“6”)。
SORTBY(a,TAKE(a,,1),1,–TAKE(a,,-1),1)
整体逻辑:先按字母排,字母相同的再按数字大小排。
=LET(a,REGEXP(TEXTSPLIT(A3,,”,”),{“[A-z]+”,”d+”}),BYROW(SORTBY(a,TAKE(a,,1),1,–TAKE(a,,-1),1),CONCAT))
作用:将排序后的两列数组逐行连接,合并回“字母+数字”的格式。
=LET(a,REGEXP(TEXTSPLIT(A3,,”,”),{“[A-z]+”,”d+”}),ARRAYTOTEXT(BYROW(SORTBY(a,TAKE(a,,1),1,–TAKE(a,,-1),1),CONCAT)))
作用:将垂直数组转换成一个用逗号和空格分隔的单一文本字符串,与源数据的格式保持一致。
至此,整个公式展现了Excel与WPS动态数组函数强大的数据处理能力,将过去需要多个辅助列才能完成的工作,浓缩成了一个公式。
学习Excel/如果你没有天赋/那就一直重复/当你快到本能反应的时候/你的重复就是别人眼中的天赋/冲破捆绑/展翅翱翔/回顾关键内容/善用图片表达/学会建立联系/拓展深度广度/浓缩关键概念/应用到行动中/善于归纳总结/尝试进行分享
map遍历scan遍历reduce迭代pivotby降维
pivotby函数byrow函数groupby函数let函数
对单元格部分文字内容替换 格式更改←
借助这个函数!合并工作表简直太好用←
比vlookup还强大的动态随机查询←
根据起始序号与终止序号写入内容←
regexp正则提取:款式&尺码多组提取←
一个关于人口普查Excel户籍整理的问题←
一个关于人口普查Excel户籍整理的问题2←
regexp+vlookup根据简称查询全称←
regexp+countif+filter根据全称查找简称←
excel1秒批处理1000条混乱时间数据←
Regexp这个大哥级函数人狠话不多←
公式里常出现的”@”、”#”、”.”是干啥的←
|