所以我试图为 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)))
最佳答案
将以下代码放入 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
关于Excel如何在遇到字符串中的第一个Alpha后停止LEFT公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45859290/