Excel如何在字符串中遇到第一个Alpha后停止LEFT公式

时间:2017-08-24 10:32:54

标签: excel excel-formula

所以我试图只为vlookup提取文本字符串的特定部分(部件号),

我有一个公式,它为我提供了大多数情况下我想要的部件号,它在到达文本字符串中的最后一个数字后停止LEFT公式。部分数字在文本字符串中的数字更多。

我需要公式将文本字符串返回到最后一个数字,但是一旦它再次变回Alpha就停止。 我希望这是有道理的,我附上了一个截图来说明问题和我的代码。如果你看R列并看到FR70YERXX / 3,它应该在Y之前停止,但我根本无法绕过这个。Excel Find formula issue

=LEFT(J2,MAX(IFERROR(FIND({1,2,3,4,5,6,7,8,9,0},J2,ROW(INDIRECT("1:"&LEN(J2)))),0)))

3 个答案:

答案 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)

并将其复制下来

Results

<强>解释

创建一个函数来获取字符串并返回一个字符串

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

enter image description here

答案 2 :(得分:1)

解决方案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))))))

参见图片以供参考。

enter image description here

解决方案2

使用辅助列

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))))),"")

根据需要拖动/复制。见图片以供参考。

enter image description here