我正在尝试使用不同的函数从子字符串中解析数据。
看例子:
Data MIDFUNCTION Nmbr Date
**NM1*IL*1*EEKS*MILBORD****MI*123456789~** EEKS*MILBORD****MI*123456789~ BORD****MI*123456789
**DTP*472*D9*20240212~ ** 20240212~
对于我使用的 mid 函数:
MID(A15,FIND("NM1*IL*1*",A15)+9,LEN(A15)-FIND("NM1*IL*1*",A15))
我使用的名字:LEFT(D15,FIND("*",D15)-1)
对于我使用的正确功能:RIGHT(A15,FIND("****MI*",A15))
对于我无法排除波浪线的日期,我使用了:RIGHT(A3,FIND("*D9*",A3))
我想要的是根据数据字段中的数据使用find和Len进行提取...mid功能似乎可以工作但不排除不需要的东西
我正在尝试提取名字、姓氏、号码以及下一行的日期并排除波浪线。
我建议真正一步一步地做到这一点,使用中间单元格来获得中间结果。首先获取数据中的所有关键位置,只有当您拥有所有这些位置时,才根据这些位置设计您的
mid
提取。
我会使用这些公式。我假设数据位于 A 列中,并从 A2 开始。然后我将按如下方式分配列:
# | A | B | C | D | E | F | G | H | 我 | J | K |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 数据 | 首先开始 | 先结束 | 最后结束 | 起始编号 | 结束编号 | 开始日期 | 名字 | 姓氏 | 数量 | 日期 |
2 | ... |
使用这些公式:
=FIND("*1*",A2)+3
=FIND("*",A2,B2)+1
=FIND("*",A2,C2)
=FIND("*MI*",A2,D2)+4
=FIND("~",A2,E2)
=FIND("*D9*",A2)+4
=IFERROR(MID(A2,B2,C2-B2-1),"")
=IFERROR(MID(A2,C2,D2-C2),"")
=IFERROR(MID(A2,E2,F2-E2),"")
=IFERROR(DATE(MID(A2,G2,4),MID(A2,G2+4,2),MID(A2,G2+6,2)),"")
这是我得到的结果:
拥有如此多的中间单元可能看起来有点大材小用,但如果这样做的话,可以更容易地发现问题出在哪里。一切正常后,您可以隐藏 B-G 列。