如何在Excel中拆分列至`*`后的首个纯数字分段处
Excel指定列内容拆分:提取
*后首个纯数字分段及剩余内容 提取第一部分(至*后首个纯数字分段结束)
假设目标数据在A列(从A2单元格开始),使用以下公式:
=LET( star_pos, SEARCH("*", A2), after_star, MID(A2, star_pos + 1, LEN(A2) - star_pos), first_non_num_pos, MIN(IF(ISERROR(MID(after_star, ROW(INDIRECT("1:"&LEN(after_star))), 1)*1), ROW(INDIRECT("1:"&LEN(after_star))), LEN(after_star)+1)), LEFT(A2, star_pos + first_non_num_pos - 1) )
- 公式说明:
star_pos定位*在单元格中的位置after_star提取*之后的所有内容first_non_num_pos找到*后第一个非数字字符的位置(若*后全为数字,则取内容长度+1)- 最后用
LEFT提取从开头到首个纯数字分段结束的内容
如果你的Excel版本不支持LET函数,可使用数组公式(输入后按Ctrl+Shift+Enter确认):
=LEFT(A2, MAX(IF(ISNUMBER(MID(A2, SEARCH("*", A2)+ROW(INDIRECT("1:"&LEN(A2)-SEARCH("*", A2))), 1)*1), SEARCH("*", A2)+ROW(INDIRECT("1:"&LEN(A2)-SEARCH("*", A2))), 0)))
提取第二部分(剩余内容)
对应上面的LET公式,剩余内容可直接复用变量:
=LET( star_pos, SEARCH("*", A2), after_star, MID(A2, star_pos + 1, LEN(A2) - star_pos), first_non_num_pos, MIN(IF(ISERROR(MID(after_star, ROW(INDIRECT("1:"&LEN(after_star))), 1)*1), ROW(INDIRECT("1:"&LEN(after_star))), LEN(after_star)+1)), TRIM(MID(A2, star_pos + first_non_num_pos, LEN(A2))) )
TRIM用于去除剩余内容开头可能存在的空格- 同样,不支持
LET的版本可使用:
=TRIM(MID(A2, MAX(IF(ISNUMBER(MID(A2, SEARCH("*", A2)+ROW(INDIRECT("1:"&LEN(A2)-SEARCH("*", A2))), 1)*1), SEARCH("*", A2)+ROW(INDIRECT("1:"&LEN(A2)-SEARCH("*", A2))), 0))+1, LEN(A2)))
异常处理(单元格无*的情况)
如果部分单元格不含*,可在公式外层添加IFERROR,返回原内容:
=IFERROR(LET( star_pos, SEARCH("*", A2), after_star, MID(A2, star_pos + 1, LEN(A2) - star_pos), first_non_num_pos, MIN(IF(ISERROR(MID(after_star, ROW(INDIRECT("1:"&LEN(after_star))), 1)*1), ROW(INDIRECT("1:"&LEN(after_star))), LEN(after_star)+1)), LEFT(A2, star_pos + first_non_num_pos - 1) ), A2)
内容的提问来源于stack exchange,提问作者Mayukh Bhattacharya
相关产品推荐
相关产品推荐

