我有一行像这样的值,如何将文本'ABCD'之后的前两位数字提取到另一个单元格,任何公式或vba?中间可能有几个字符,有时甚至没有字符。
答案 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")
答案 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
检查里面的字符串是否为数字; 1
,3
,4
或5
数字,具体取决于你放的参数。像这样=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。