1

我有一组描述,其中包含排列成一列的 ID 号。例如:

A栏

这是一个 ID 号 ID12345 的描述。

这是一个包含 ID 号的描述 ID66666。

这是 ID99999 的描述,其中包含 ID 号。

ID 号码始终采用“IDXXXXX”格式我想以某种方式修剪每个单元格中的所有文本并只留下那个 ID 号码。

我的想法:这可以通过找到像“ID ?????”这样的字符串来完成。并将其设置为变量,然后用该变量替换单元格的内容?或者通过删除单元格中的所有字符 - 除了“ID?????”

任何帮助将不胜感激,谢谢。

4

2 回答 2

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
于 2013-05-22T07:20:46.803 回答
1

我将此视为对我的智力的挑战,鉴于这是一天的结束,在 Excel 先生论坛上看到Aladdinpgc01的公式后,我做了一些工作并想出了这个 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))
于 2013-05-22T16:42:59.737 回答