使用 excel 的 IF、FIND 和 MID 功能将条码转换为特定格式

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 个字符:

  • 只保留最后三段
  • 删除 U 并在适当的地方添加前缀 0
  • 删除 S 并在适当的地方添加前缀 0
  • 删除 P 并在适当的地方添加前缀 0

例如:

  • 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 个字符,例如:

  • WS-S5-S-L1-C31-F-U5-S9-P14 转换为 S1-F-05-09-14
  • WS-S5-N-L2-C31-D-U5-S8-P1 转换为 N2-D-05-08-01
  • WS-S5-N-L1-C29-V-U16-S6-P6转N1-V-16-06-06

Mát*_*ász 6

正如@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")


yga*_*aft 5

非常丑陋,
但您可以通过以下方式实现它,它假定您的工作数据在 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)