答案 0 :(得分:1)
首先,您需要创建一个命名范围。命名范围的目的是按空间规范化和拆分数据,以便其他公式可以读取它,而不必每次都输出。
首先,将数据放在第1行开始的A列中(如示例数据图像所示)。然后创建一个名为SplitString
的命名范围,并使用以下公式定义它:
=INDEX(TRIM(MID(SUBSTITUTE(TRIM(SUBSTITUTE($A1,"."," "))," ",REPT(" ",999)),999*(ROW($1:$10)-1)+1,999)),)
请注意ROW($1:$10)
。 10
就是猜测字符串永远不会有超过10个条目要在单个单元格中进行评估。这与您的样本数据一致,其中具有最多条目的单元格为ROHTAK (BUILDER) 7777777777 PAL 6666666666
,其中有5个条目要评估。如果您需要增加数字,只需将10增加为更高的数字。
然后在单元格B1中上下复制,使用此公式,该公式使用已定义的SplitString
命名范围:
=IFERROR(IF(AND(ISNUMBER(--$A1),LEN($A1)=10,COLUMN(A1)=1),--$A1,--INDEX(SplitString,MATCH(1,INDEX((COUNTIF($A1:A1,SplitString)=0)*(LEN(SplitString)=10)*(ISNUMBER(--SplitString)),),0))),"")
答案 1 :(得分:0)
我会尝试使用此答案中提到的正则表达式:https://stackoverflow.com/a/22542835/2068595
从表面上看,我会在你的专栏中寻找这个正则表达式[0-9] {10}(意味着从0到9连续10个字符)。
答案 2 :(得分:0)
使用 A 列中的数据运行此短宏:
Sub numbersss()
Dim N As Long, L As Long, K As Long
Dim i As Long, j As Long, t As String
N = Cells(Rows.Count, "A").End(xlUp).Row
For j = 1 To N
t = Cells(j, 1).Text
L = Len(t)
For i = 1 To L
If Mid(t, i, 1) Like "[0-9]" Then
Else
Mid(t, i, 1) = " "
End If
Next i
ary = Split(Application.WorksheetFunction.Trim(t), " ")
K = 2
For Each a In ary
If Len(a) = 10 Then
Cells(j, K) = "'" & a
K = K + 1
End If
Next a
Next j
End Sub
例如:
如果有人发布纯配方解决方案,请忽略此帖。