删除单元格中的开始字符,同时保留删除尾部字符的公式
这是我正在使用的数据格式
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)