EXCEL VBA:从单元格中的字符串中提取8位数序列

时间:2015-12-08 22:32:55

标签: string excel vba excel-vba extract

大家好日子,

我正在尝试找到从单元格中提取8位数的智能解决方案(唯一ID)。这里出现的问题可能如下:

112, 65478411, sale
746, id65478411, sale 12.50
999, 65478411
999, id65478411

这是大多数情况,也可能都是提到的,所以我基本上需要找到单元格中的8位数字并将它们提取到不同的单元格中。有没有人有任何想法?我虽然删除了第一个被删除的,然后检查单元格是否以id开头,进一步消除它,但我明白这不是聪明的方式..

感谢您的见解。

3 个答案:

答案 0 :(得分:5)

试试这个公式:

=--TEXT(LOOKUP(10^8,MID(SUBSTITUTE(A1," ","x"),ROW(INDIRECT("1:"&LEN(A1)-7)),8)+0),"00000000")

这将返回字符串中的8位数字。

只返回文本:

=TEXT(LOOKUP(10^8,MID(SUBSTITUTE(A1," ","x"),ROW(INDIRECT("1:"&LEN(A1)-7)),8)+0),"00000000")

答案 1 :(得分:1)

您也可以编写UDF来完成此任务,例如

Public Function GetMy8Digits(cell As Range)
Dim s As String
Dim i As Integer
Dim answer
Dim counter As Integer

'get cell value
s = cell.Value

'set the counter
counter = 0
'loop through the entire string
For i = 1 To Len(s)
    'check to see if the character is a numeric one
    If IsNumeric(Mid(s, i, 1)) = True Then
        'add it to the answer
        answer = answer + Mid(s, i, 1)
        counter = counter + 1
        'check to see if we have reached 8 digits
        If counter = 8 Then
            GetMy8Digits = answer
            Exit Function
        End If
     Else
     'was not numeric so reset counter and answer
     counter = 0
     answer = ""
    End If
Next i
End Function

答案 2 :(得分:0)

这是另一种选择:

=RIGHT(TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",LEN(A1))),LEN(A4),LEN(A1))),8)

将所有逗号替换为重复字符串长度的空格

然后从原始字符串的长度开始获取字符串长度的中间点(即新字符串中的第二个字)

修剪空格

采取正确的8个字符来修剪任何额外的字符(如id)