Ind*_*ndy 4 worksheet-function microsoft-excel microsoft-excel-2013
在 Excel 中,我有许多包含不同类型字符的列,例如:
WS-S5-S-L1-C31-F-U5-S9-P14
WS-S5-S-L1-C31-F-U5-S8-P1
WS-S5-N-L1-C29-V-U16-S6-P6
Run Code Online (Sandbox Code Playgroud)
我想使用以下规则将这些转换为 8 个字符:
例如:
WS-S5-S-L1-C31-F-U5-S9-P14
转换成 05-09-14
WS-S5-S-L1-C31-F-U5-S8-P1
转换成 05-08-01
WS-S5-N-L1-C29-V-U16-S6-P6
转换成 16-06-06
我相信有一种方法可以使用IF
, FIND
&MID
函数在 Excel 中转换这些,但不知道如何开始。任何帮助都感激不尽。
最后,如果可能的话,我想将其转换为 13 个字符,例如:
正如@ygaft 指出的那样,这是可能的,但使用标准 Excel 函数会很长。
我在这种情况下使用免费的RegEx Find/Replace插件,使用正则表达式可以更轻松地实现它。
公式:
=RegExReplace(RegExReplace(A1,".*U([0-9]+)-S([0-9]+)-P([0-9]+)","0$1-0$2-0$3"),"0([0-9]{2})","$1")
这个怎么运作:
A1
: 来自 A1 单元格的内容".*U([0-9]+)-S([0-9]+)-P([0-9]+)"
寻找一种模式“...U#-S#-P#”,其中“#”代表一个或多个数字并记住这些数字(括号创建参考组)"0$1-0$2-0$3"
合并在上一步中找到的数字,将前导 0 添加到所有数字中。RegExReplace(...)
- 处理内部函数的结果"0([0-9]{2})"
- 查找 0 后跟两位数字(= 不需要前导 0 的情况)"$1"
- 只保留两位数字,去掉前导 0(仅在上一步匹配的情况下)您还可以在线查看有关正则表达式的更多说明:
注意:我与该加载项没有任何关联,只是使用它,因为它使我的生活更轻松。
您可以将此公式用于 13 个字符的代码:
=RegExReplace(RegExReplace(A3,".*-([A-Z])-[A-Z]([0-9]).*-([A-Z])-U([0-9]+)-S([0-9]+)-P([0-9]+)","$1$2-$3-0$4-0$5-0$6"),"0([0-9]{2})","$1")
非常丑陋,
但您可以通过以下方式实现它,它假定您的工作数据在 A 列中:
=TEXT(LEFT(RIGHT(A1,LEN(A1)-FIND("U",A1,1)),FIND("-",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)-1),"00")&"-"&TEXT(MID(RIGHT(A1,LEN(A1)-FIND("U",A1,1)),FIND("-",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)+2,(FIND("P",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)-2-FIND("S",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1))),"00")&"-"&TEXT(RIGHT(RIGHT(A1,LEN(A1)-FIND("U",A1,1)),LEN(RIGHT(A1,LEN(A1)-FIND("U",A1,1)))-FIND("P",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)),"00")
Run Code Online (Sandbox Code Playgroud)