如果数字在给定范围内,则从复杂字符串中提取数字

如果数字在给定范围内,则从复杂字符串中提取数字

我需要一个 Excel 公式(或 VBA 宏)来让我从字符串中提取值。字符串是单个单元格中由空格分隔的单词序列。我想要的单词(代表自行车尺寸)是

  • 47 到 60 之间的一个数字(可能是整数,但未指定)(或其他范围,可能动态指定),或者
  • 字符串“sm”、“med”或“lg”之一。

我预计字符串中只有一个限定词,因此任何合理的错误处理响应

  • 没有限定词,或
  • 多个限定词

是可以接受的。大小可能位于字符串中的不同位置。示例:

Cervelo P2 105 5800 56 '15                        号码56是期望的结果
Cervelo P2 105 54 6000 '15                        号码54是期望的结果
Cervelo P3 105 5800 60 '15                        号码60是期望的结果
Cervelo P2 105 5800 sm '15                        字符串山猫是期望的结果

我只对整个单词感兴趣,所以 58(“5800”的子字符串)不符合条件。

现在我正在删除'15然后提取最后两位数字。但这种方法只有在自行车尺寸是倒数第二个值时才有效。但是,如上所示,有些情况下尺寸位于字符串中的其他位置。

如何使用 Excel 中的公式或 VBA 宏来执行此操作?

答案1

我使用 VBA 提出了一个解决方案:

Public Function BikeSize(MinSize As Integer, MaxSize As Integer, datainput As String)
    Dim dataoutput() As Variant
    ReDim dataoutput(0)
    BikeSize = 0
    datasplitted = Split(datainput, " ")
    arraysize = UBound(datasplitted)
    j = 1
    For i = 0 To arraysize
        m = datasplitted(i)
        If m >= MinSize And m <= MaxSize Then
            ReDim Preserve dataoutput(j)
            dataoutput(j) = m
            j = j + 1
        End If
        If m = "sm" Or m = "med" Or m = "lg" Then
            ReDim Preserve dataoutput(j)
            dataoutput(j) = m
            j = j + 1
        End If
    Next i
    totalresults = UBound(dataoutput)
    Select Case totalresults
        Case 0
            BikeSize = 0
        Case 1
            BikeSize = dataoutput(totalresults)
        Case Else
            For i = 1 To totalresults
                wrongresult = wrongresult & dataoutput(i) & " - "
            Next i
            BikeSize = wrongresult
    End Select
End Function

您必须打开宏/Visual Basic,转到模块_>添加模块并将代码粘贴到右侧(另请参阅如何在 MS Office 中添加 VBA?)。

那么如果你的字符串在单元格上A1,你的最小值C1,你的最大值D1然后B1您只需输入=BikeSize(C1,D1,A1)即可获得结果。

如果字符串没有匹配的数字,则输出零0

如果字符串有多个匹配的数字,它会输出所有匹配项,并用破折号分隔。

它还承认山猫医学LG

相关内容