car*_*oll 4 vba worksheet-function microsoft-excel microsoft-excel-2013
我需要一个 Excel 公式(或 VBA 宏),它可以让我从字符串中提取一个值。字符串是单个单元格中由空格分隔的单词序列。我想要这个词(代表自行车尺寸)是
我希望字符串中只有一个限定词,因此任何合理的错误处理响应
会被接受。大小可能位于字符串中的不同位置。例子:
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 的字符串sm是所需的结果
我只对整个单词感兴趣,所以 58(“5800”的子字符串)不符合条件。
现在我正在剥离'15然后提取最后两位数字。但是这种方法只有在自行车尺寸是倒数第二个值时才有效。但是,如上所示,存在大小在字符串中的其他位置的情况。
如何使用 Excel 中的公式或 VBA 宏执行此操作?
我使用 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
Run Code Online (Sandbox Code Playgroud)
您必须打开宏/Visual Basic 转到模块 _> 添加模块并将代码粘贴到右侧(另请参阅如何在 MS Office 中添加 VBA?)。
然后,如果您的字符串在单元格A1 上,您在C1 上的最小值,在D1上的最大值,然后在B1 上,您只需输入=BikeSize(C1,D1,A1)即可获得结果。
如果字符串没有匹配的数字,则输出零0。
如果字符串有多个匹配数字,它将输出所有匹配的数字,以破折号分隔。
它还可以识别sm、med和lg。
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |