![Excel:提取包含 N 个破折号的子字符串](https://linux22.com/image/1516953/Excel%EF%BC%9A%E6%8F%90%E5%8F%96%E5%8C%85%E5%90%AB%20N%20%E4%B8%AA%E7%A0%B4%E6%8A%98%E5%8F%B7%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
这让我很困惑。此列表中的每个单元格都包含一个由 4 个破折号分隔的子字符串。我想要做的是能够将该字符串提取到其自己的列中。字符串在单元格之间不一定位于相同的位置。
#99760395 AP965-690-0-WE-00
#88908-789302 92WQ-50Y-0-N-900BD
6676549 9W7B-20W-0-N-00 SERVO
RZ2268461 TAO120-50-0-X-000 W/ AMPLIFIER
REF# BW309-8WV9-0-V-00
以下是我希望实现的最终结果:
AP965-690-0-WE-00
92WQ-50Y-0-N-900BD
9W7B-20W-0-N-00
TAO120-50-0-X-000
BW309-8WV9-0-V-00
我尝试过 LEN、FIND、LEFT、RIGHT 函数的组合,但似乎无法实现我想要的结果。
答案1
这里似乎您的数据总是出现在第一组空格之后,所以我认为这个函数对您有用。这里的关键是使用 Mid 函数。
=TRIM(IFERROR(MID(TRIM(A2);FIND(" ";TRIM(A2));FIND(CHAR(1);SUBSTITUTE(TRIM(A2);" ";CHAR(1);2))-FIND(" ";TRIM(A2)));RIGHT(TRIM(A2);LEN(TRIM(A2))-FIND(CHAR(1);SUBSTITUTE(TRIM(A2);" ";CHAR(1);1)))))
看起来相当混乱,所以这里做个小分析。
第 1 部分:
=RIGHT(TRIM(A2);LEN(TRIM(A2))-FIND(CHAR(1);SUBSTITUTE(TRIM(A2);CHAR(32);CHAR(1);1)))
这将找到“ ”的第一个出现位置(我们也可以使用 Char(32),但这种方式可能更容易理解。)由于 TRIM,第一组空格的长度始终为 1(一个空格)。这就是为什么我们可以使用第一次和第二次出现的位置。
第2部分:
=MID(TRIM(A2);FIND(" ";TRIM(A2));FIND(CHAR(1);SUBSTITUTE(TRIM(A2);" ";CHAR(1);2))-FIND(" ";TRIM(A2)))
这里我们查找从第一次出现到第二次出现的字符串。
如果第二次出现时没有空格,则会产生错误。这就是我们将其与第 1 部分结合起来的原因。
=Trim(IFERROR(第 2 部分;第 1 部分))
麦克风