用于提取3个特定数字模式的VBA代码

我在Excel中工作,需要VBA代码来提取3个特定的数字模式。 在AI列中有几行string,包括字母,数字和标点符号。 我需要删除除13位数字(仅包含数字),十位数字(仅包含数字)或9位数字后面紧跟着“x”字符的所有字符。 这些是isbn号码。

剩下的字符应该被一个空格隔开,而且只有一个空格。 所以,在A1中find以下string:“这里有几本书,包括0192145789和9781245687456,还包括了045789541x这本书,这本书是1亿本。

输出应该是:0192145789 9781245687456 045789541x

请注意,数字100000000不应包含在输出中,因为它不符合上述三种模式中的任何一种。

我不是反对VBA的Excel公式解决scheme,但我认为VBA会更干净。 提前致谢。

这是一个VBA函数,它将完成你指定的任务

Function ExtractNumbers(inputStr As String) As String Dim outputStr As String Dim bNumDetected As Boolean Dim numCount As Integer Dim numStart As Integer numCount = 0 bNumDetected = False For i = 1 To Len(inputStr) If IsNumeric(Mid(inputStr, i, 1)) Then numCount = numCount + 1 If Not bNumDetected Then bNumDetected = True bNumStart = i End If If (numCount = 9 And Mid(inputStr, i + 1, 1) = "x") Or _ numCount = 13 And Not IsNumeric(Mid(inputStr, i + 1, 1)) Or _ numCount = 10 And Not IsNumeric(Mid(inputStr, i + 1, 1)) Then If numCount = 9 Then outputStr = outputStr & Mid(inputStr, bNumStart, numCount) & "x " Else outputStr = outputStr & Mid(inputStr, bNumStart, numCount) & " " End If End If Else numCount = 0 bNumDetected = False End If Next i ExtractNumbers = Trim(outputStr) End Function 

这不是什么奇特的东西,只是使用string函数来查看你的string一个字符,一次寻找以x,10位数字和13位数字结尾的9位数字的部分,并提取它们成一个新的string。

这是一个UDF,因此您可以在工作簿中将其用作公式