Excel如何在遇到第一个string中的Alpha后停止LEFT公式
所以我试图提取一个特定部分的文本string(部件号)的查找,
我有一个公式,给出了我想要的大多数情况下的零件编号,在到达文本string中的最后一个编号后停止LEFT公式。 一些零件号在文本string中有更多数字。
我需要公式返回文本string,直到最后一个数字,但停止一旦它又变回到阿尔法。 我希望这是有道理的,我附上了一个截图来举例说明问题和我的代码。 如果你看R栏,看FR70YERXX / 3,那应该在Y之前停下来,但是我根本无法把头转过来。
=LEFT(J2,MAX(IFERROR(FIND({1,2,3,4,5,6,7,8,9,0},J2,ROW(INDIRECT("1:"&LEN(J2)))),0)))
将以下代码放入Excel中的模块中
Function LeftCode(s As String) As String i = 1 While Not ((Mid(s, i, 1) >= "0") And (Mid(s, i, 1) <= "9")) And (i <= Len(s)) i = i + 1 Wend If i > Len(s) Then LeftCode = s Else While Not ((Mid(s, i, 1) < "0") Or (Mid(s, i, 1) > "9")) And (i <= Len(s)) i = i + 1 Wend If i > Len(s) Then LeftCode = s Else LeftCode = Left(s, i - 1) End If End If End Function
然后在R栏中input:
=LeftCode(J2)
并复制下来
说明
创build一个函数来获取一个string并返回一个string
Function LeftCode(s As String) As String
从第一个字符开始,一次遍历string一个字符,直到find一个数字(0-9)
i = 1 While Not ((Mid(s, i, 1) >= "0") And (Mid(s, i, 1) <= "9")) And (i <= Len(s)) i = i + 1 Wend
如果我们已经到了最后,没有数字,那就把它全部归还
If i > Len(s) Then LeftCode = s
否则,继续遍历每个字符,直到find一个非数字
Else While Not ((Mid(s, i, 1) < "0") Or (Mid(s, i, 1) > "9")) And (i <= Len(s)) i = i + 1 Wend
如果我们达到目的,那么我们就需要整个事情
If i > Len(s) Then LeftCode = s Else
否则,我们想要最后一个字符
LeftCode = Left(s, i - 1) End If End If End Function
看来你想截断,直到数字的第一个组合后面是非数字 。 如果是这样的话:
=LEFT(H2,AGGREGATE(15,6,ROW($1:$98) /ISNUMBER(VALUE(MID(H2,ROW($1:$98),1))) /ISERROR(VALUE(MID(H2,ROW($2:$99),1))),1))
解决scheme1
如果你愿意使用,那么我可以给你一个长长的难看的配方。 尝试这个
=-LOOKUP(1,-LEFT(MID(A1,MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LEN(A1)-MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))+1),ROW(INDIRECT("1:"&LEN(MID(A1,MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LEN(A1)-MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))+1))))))
请参阅图片以供参考。
解决scheme2
使用助手列
在Cell B2
input下面的公式来获取第一个数字的位置
=MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A2&"0123456789"))
然后在Cell C2
中删除第一个数字前面的字母后inputstring
=RIGHT(A2,LEN(A2)-B2+1)
最后,在Cell D2
input下面的公式
=IFERROR(-LOOKUP(1,-LEFT(C2,ROW(INDIRECT("1:"&LEN(C2))))),"")
根据需要拖放/复制。 请参阅图片以供参考。