|
所有数据都被硬塞进了一个单元格,就像下面这张图里的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这个大哥级函数人狠话不多← 公式里常出现的"@"、"#"、"."是干啥的←
|