基本上,我在excel文件的一个单元格中有一个很长的文本,其中包含多个空格,特殊字符等,我只需要从中提取特定的单词,每个单词到另一列中的单独单元格。
我要寻找的东西: 符号,长度始终为9个字符,并且始终至少包含一个数字(最多9个)。
因此,以A1为例:
euhe: djj33 dkdakofja. kaowdk ---------- jffjbrjjjj j jrjj 08/01/2222 999ABC123
fjfjfj 321XXX888 .... ........ 123456789AA
最后我想拥有:
999ABC123 in B1
和
321XXX888 in B2.
现在,我通过使用“文本到列”功能来执行此操作,然后只是手动查找特定的单词,但有时音量太大,需要太多时间,并且自动化它很酷。
有人可以帮忙吗?谢谢!
编辑: 更多示例:
INPUT: '10/01/2016 1,060X 8.999%!!! 1.33 0.666 928888XE0'
OUTPUT: '928888XE0'
INPUT: 'ABCDEBATX ..... ,,00,001% 20///^^ addcA7 7777a 123456789 djaoij8888888 0.000001 12@'
OUTPUT: '123456789'
INPUT: 'FAR687465 B22222222 __ djj^66 20/20/20/20 1:'
OUTPUT: 'FAR687465' in B1 'B22222222' in B2
INPUT: 'fil476 .00 20/.. BUT AAAAAAAAA k98776 000.0001'
OUTPUT: 'blank'
要澄清一下:9个字符串可以在任何地方,没有规则,它们之前或之后是什么,它们可以彼此相邻,也可以只是在这堵文本墙的开头和结尾,此处没有规则,文本是随机的,是从某些系统中提取的,可以包含日期等。...这些符号始终为9个字符长,并且不是文本中仅有的9个字符。我称它们为符号,但它们只能由数字和字母组成。只能是数字,但不能只有字母。 A1单元格在单词/符号之间可以包含多个空格/制表符。
如果可能的话,不仅对A1,而且对整个列A都执行此操作,直到找到第一个空白单元格为止。
答案 0 :(得分:0)
尝试此代码
Sub Test()
Dim r As Range
Dim i As Long
Dim m As Long
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\b[a-zA-Z\d]{9}\b"
For Each r In Range("A1", Range("A" & Rows.Count).End(xlUp))
If .Test(r.Value) Then
For i = 0 To .Execute(r.Value).Count - 1
If CBool(.Execute(r.Value)(i) Like "*[0-9]*") Then
m = IIf(Cells(1, 2).Value = "", 1, Cells(Rows.Count, 2).End(xlUp).Row + 1)
Cells(m, 2).Value = .Execute(r.Value)(i)
End If
Next i
End If
Next r
End With
End Sub
答案 1 :(得分:0)
这段代码差不多了...只需要检查字符串...但是excel在Str的代码行上崩溃了
Sub Test()
Dim Outputs, i As Integer, LastRow As Long, Prueba, Prueba2
Outputs = Split(Range("A1"), " ")
For i = 0 To UBound(Outputs)
If Len(Outputs(i)) = 9 Then
Prueba = 0
Prueba2 = 0
On Error Resume Next
Prueba = Val(Outputs(i))
Prueba2 = Str(Outputs(i))
On Error GoTo 0
If Prueba <> 0 And Prueba2 <> 0 Then
LastRow = Range("B10000").End(xlUp).Row + 1
Cells(LastRow, 2) = Outputs(i)
End If
End If
Next i
End Sub
如果有人可以帮助设置字符串检查,那将会做我猜到的事情。