在Excel中的某个字符串后面提取前两位数字

时间:2018-03-13 09:25:03

标签: excel vba excel-vba excel-formula

我有一行像这样的值,如何将文本'ABCD'之后的前两位数字提取到另一个单元格,任何公式或vba?中间可能有几个字符,有时甚至没有字符。

  • ABCD 10 sadkf sdfas
  • ABCD-20sdf asdf
  • ABCD 40
  • ABCD50 asdf

3 个答案:

答案 0 :(得分:1)

您可以使用工作表公式执行此操作。不需要VBA。

假设您不需要测试是否存在两位数字:

=MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&"1234567890")),2)

如果您需要测试是否存在两位数,可以尝试:

=IF(ISNUMBER(-RIGHT(MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&"1234567890")),2),1)),MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&"1234567890")),2),"Invalid")

enter image description here

答案 1 :(得分:0)

通常,在StackOverflow中显示一些代码总是一个好主意。因此,你表明你已经尝试了一些东西,并给出了答案的一些指示。

关于前两位数提取,有很多方法可以做到这一点。从RegEx开始,完成一个简单的字符循环并检查每个字符。

这是循环选项:

Public Function ExtractTwoDigits(inputString As String) As Long

    Application.Volatile

    Dim cnt     As Long
    Dim curChar As String

    For cnt = 1 To Len(inputString)
        curChar = Mid(inputString, cnt, 1)
        If IsNumeric(curChar) Then
            If Len(ExtractTwoDigits) Then
                ExtractTwoDigits = ExtractTwoDigits & curChar
                Exit Function
            Else
                ExtractTwoDigits = curChar
            End If
        End If
    Next cnt

    ExtractTwoDigits = -1

End Function
  • Application.Volatile确保公式每次都重新计算;
  • 如果-1; 中不存在两位数,则
  • inputString就是答案
  • IsNumeric检查里面的字符串是否为数字;
  • 作为进一步的步骤,您可以尝试使函数有点健壮,提取第一个1345数字,具体取决于你放的参数。像这样=ExtractTwoDigits("tarato123ra2",4),返回1232

答案 2 :(得分:0)

RegEx版本:

Public Function GetFirstTwoNumbers(ByVal strInput As String) As Integer
Dim reg As New RegExp, matches As MatchCollection

With reg
    .Global = True
    .Pattern = "(\d{2})"
End With

Set matches = reg.Execute(strInput)
If matches.Count > 0 Then
    GetFirstTwoNumbers = matches(0)
Else
    GetFirstTwoNumbers = -1
End If
End Function

您必须在extras->引用下启用Microsoft Regular Expressions 5.5。模式(\d{2})匹配2位数,返回值是数字,如果不存在-1。

注意:它只提取2个连续数字。

如果将此功能放入模块中,则可以像普通公式一样使用它。

Here一个很棒的网站,可以进入regEx。