我有一组描述,其中包含排列在列中的ID号。例如:
A栏
这是ID12345中ID号的描述。
这是ID66666的描述,其中包含ID号。
这是ID99999描述中包含ID号。
Id编号始终采用“IDXXXXX”格式我想以某种方式删除每个单元格中的所有文本,并留下该ID编号。
我的想法: 这可以通过找到像“ID ?????”这样的字符串来完成并将其设置为变量,然后用该变量替换单元格的内容?或者通过删除单元格中的所有字符 - 除了“ID ?????”
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:2)
我为您编写的代码将遍历A列中的所有项目。它会将每个单元格中的所有单词拆分为一个数组。如果单词长度为7或8个字符,那么它可能是IDxxxxx
。它将执行一些检查以查看它是否真正匹配IDxxxxx
语法。如果是这样,它将替换单元格的内容,只删除所有剩余文本的ID。
Sub ReplaceContentWithIDs()
Dim ws As Worksheet
Set ws = Sheets("Sheet1") ' or your sheet name
Dim rng As Range
Dim i&, lr&, j&
Dim arr
Dim str$
lr = ws.Range("A" & Rows.Count).End(xlUp).Row
' starting from 1 - if you have headers change to 2
For i = 1 To lr
Set rng = ws.Range("A" & i)
arr = Split(CStr(rng.Value), " ")
For j = LBound(arr) To UBound(arr)
str = arr(j)
If (Len(str) = 7) Or (Len(str) = 8) Then
If (StrComp(Left(str, 2), "ID", vbTextCompare) = 0) And _
IsNumeric(Right(Left(str, 7), 5)) Then
' found it
If Len(str) = 8 Then
rng.Value = Left(str, 7)
ElseIf Len(str) = 7 Then
rng.Value = str
End If
End If
End If
Next j
Set rng = Nothing
Next i
End Sub
答案 1 :(得分:1)
我认为这是对我的智力的挑战,并且鉴于这是一天的结束,在Excel论坛上看到Aladdin和pgc01的公式后,我做了一些工作,想出了这个CSE(数组公式):
=IF(ISNUMBER(LOOKUP(9.99999999999999E+307,SEARCH({"ID0","ID2","ID3","ID4","ID5","ID6","ID7","ID8","ID9"},A1))),MID(A1,LOOKUP(9.99999999999999E+307,SEARCH({"ID0","ID2","ID3","ID4","ID5","ID6","ID7","ID8","ID9"},A1)),7),"")
我对这个CSE数组公式也有好运:
=IF(ISNUMBER(SEARCH("ID"&{1,2,3,4,5,6,7,8,9},$A$1)),MID(A$1,SEARCH("ID"&{1,2,3,4,5,6,7,8,9},$A$1),7))