删除单元格中的开始字符,同时保留删除尾部字符的公式

这是我正在使用的数据格式

Original Expected 300342 300342 3003743 3003743 3000483a 3000483 3004375v2 3004375 3004375v3 3004375 3124275IE08 3124275 3124275IE11 3124275 321251b 321251 KBZ_KB3018238 3018238 

以下代码更正了尾随字符,但不是开头的KBZ_KB。 我不确定如何更新代码,以便如果find开始的字符,它们也会被删除。

 =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会把{}放在公式的周围。

对于这样的事情来说,最简单的方法是将它与辅助列分隔开来。 您可以隐藏这些助手列或将它们剪切到隐藏的工作表(如果需要),以便您只有原始和输出:

在这里输入图像说明

在单元格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进行确认

这里:

 =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(在两个地方)以匹配您的数据,但不要更改行中的A1($ A $ 1:$ A $ 100)

你也可以像这样调整你的数组公式:

 =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)) 

请注意,这是一个数组公式,你必须用Ctrl + Shift + Enter来确认,而不是只按下Enter键。 数组公式

看看这个数组公式如何处理你的数据:

 =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)