这是我使用
的数据格式Original Expected
300342 300342
3003743 3003743
3000483a 3000483
3004375v2 3004375
3004375v3 3004375
3124275IE08 3124275
3124275IE11 3124275
321251b 321251
KBZ_KB3018238 3018238
以下代码更正了尾随字符,但不校正KBZ_KB的开头。我不确定如何更新代码,以便在找到起始字符时也将其删除。
=IFERROR(--LEFT(A2,MIN(IF(NOT(ISNUMBER(--MID(A2,ROW(INDIRECT("1:" & LEN(A2))),1))),ROW(INDIRECT("1:" & LEN(A2)))))-1),A2)
作为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。如果正确完成,那么excel会将{}放在公式周围。
答案 0 :(得分:1)
对于这样的事情,最简单的方法是将它分解为带有辅助列的单独单元格。您可以隐藏这些帮助列或将其剪切为隐藏的工作表(如果愿意),以便您只有原始和输出:
在单元格B2中并向下复制:
=MATCH(TRUE,INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),),0)
在单元格C2中并向下复制:
=MATCH(FALSE,INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT(B2&":"&LEN(A2)+1)),1)),),0)-1+B2-1
在单元格D2中并向下复制:
=IFERROR(--MID(A2,B2,C2),A2)
将整个公式放在一个单元格中会导致非常大的混乱,难以解释或更新。但是,如果你绝对必须在一个公式中使用它:
=IFERROR(--MID(A2,MATCH(TRUE,INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),),0),MATCH(FALSE,INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT(MATCH(TRUE,INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),),0)&":"&LEN(A2)+1)),1)),),0)-1+MATCH(TRUE,INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),),0)-1),A2)
请注意,这些都不是数组公式,不需要使用Ctrl + Shift + Enter
进行确认答案 1 :(得分:1)
下面:
=LOOKUP(99^99,--MID(A1,MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),ROW($A$1:$A$100)))
更改公式中的A1(在两个地方)以匹配您的数据,但不要在ROW中更改A1($ A $ 1:$ A $ 100)
答案 2 :(得分:0)
你也可以调整你的数组公式,以达到预期的效果:
=IF(NOT(ISNUMBER(LEFT(A2,1))),MID(A2,MATCH(TRUE,ISNUMBER(1*MID(A2,ROW(INDIRECT("A1:A"&LEN(A2))),1)),0),LEN(A2)-MATCH(TRUE,ISNUMBER(1*MID(A2,ROW(INDIRECT("A1:A"&LEN(A2))),1)),0)),IFERROR(MID(A2,1,-1+MATCH(FALSE,ISNUMBER(1*MID(A2,ROW(INDIRECT("A1:A"&LEN(A2))),1)),0)),A2))
答案 3 :(得分:0)
检查此数组公式是否适用于您的数据:
=MID(A2,IFERROR(MIN(SEARCH(ROW($A$1:$A$9),A2)),1),MIN(IFERROR(ROW($A$1:$A$40)*100+MID(MID(A2,IFERROR(MIN(SEARCH(ROW($A$1:$A$9),A2)),1),LEN(A2)),ROW($A$1:$A$40),1),ROW($A$1:$A$40)))-1)