所以我试图只为vlookup提取文本字符串的特定部分(部件号),
我有一个公式,它为我提供了大多数情况下我想要的部件号,它在到达文本字符串中的最后一个数字后停止LEFT公式。部分数字在文本字符串中的数字更多。
我需要公式将文本字符串返回到最后一个数字,但是一旦它再次变回Alpha就停止。 我希望这是有道理的,我附上了一个截图来说明问题和我的代码。如果你看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)))
答案 0 :(得分:2)
将以下代码放入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列中输入:
=LeftCode(J2)
并将其复制下来
<强>解释强>
创建一个函数来获取字符串并返回一个字符串
Function LeftCode(s As String) As String
从第一个字符开始,一次循环一个字符,直到找到一个数字(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
否则继续遍历每个字符,直到找到非数字
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
答案 1 :(得分:2)
似乎您要截断,直到数字的第一个组合后跟非数字。如果是这样,试试这个:
=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))
答案 2 :(得分:1)
如果你愿意,我可以给你一个看起来很难看的公式。试试这个
=-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))))))
参见图片以供参考。
使用辅助列
在Cell B2
中输入以下公式以获取第一个数字的位置
=MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A2&"0123456789"))
然后在Cell C2
中删除第一个数字之前的字母后获取字符串,输入
=RIGHT(A2,LEN(A2)-B2+1)
最后,在Cell D2
中输入以下公式
=IFERROR(-LOOKUP(1,-LEFT(C2,ROW(INDIRECT("1:"&LEN(C2))))),"")
根据需要拖动/复制。见图片以供参考。