0

我在特定列中有一些单元格,其中包含字母数字文本以及其他单词或数字。

单元格的示例以粗体显示

底部:J103 注 13

我想删除 BOTTOM:, NOTE 和 13 但保留 J103

J103 的文本可能包含多个字母和一到四个数字的范围,但它们将始终组合在一起,并以特定行的相同字母开头。有些单元格只有我想保留的文本,但会用逗号分隔。满足此标准的单元格应被忽略,如下所示。

CR33、CR45、CR49 - 第 1 行

D12、D13、D14、D104 - 第 2 行

我想删除的单词永远不会有数字。独立的数字不会有字母,如果出现一些奇怪的情况,字母最后会出现在 13a。

如果特定单元格具有:

上:J104 下:J103

我想同时删除 TOP: 和 BOTTOM: 并将剩余的 J104 和 J103 逗号分隔。

J104、J103

如果可能的话,我更喜欢这一切作为一个宏。

我是 VBA 的初学者,所以要温柔

Andy G 在他的回复中建议在他的代码中使用正则表达式。

我已经阅读了此事,但​​我不完全了解实际发生的情况。这是我试图无济于事的。

Sub test()
Dim rngToSearch As Range
Dim rng As Range
'Tools References - Microsoft VBScript Regular Expressions 5.5
Dim rgx As New VBScript_RegExp_55.RegExp
Dim matches As Variant, match As Variant
Dim strTemp As String
Dim LastRow As Long
Dim cellText As String
Dim i As Integer

With ActiveSheet
    LastRow = .Cells(.Rows.Count, "D").End(xlUp).Row
    End With

rgx.Pattern = "[A-Z]+\d{1,4}"
'rgx.IgnoreCase = True
rgx.Global = True
Application.ScreenUpdating = False
Set rngToSearch = Range("D1:D" & LastRow).CurrentRegion
    For Each rng In rngToSearch
    strTemp = ""
    Set matches = rgx.Execute(rng.Value)
    For Each match In matches
        strTemp = strTemp & match.Value & ","
    Next match
    If Len(strTemp) > 0 Then
        rng.Offset(0, 1).Value = Left(strTemp, Len(strTemp) - 1)
    End If
Next rng
Application.ScreenUpdating = True
End Sub

我很感激任何答案。提前致谢。

4

1 回答 1

0

好吧,我有下面的代码,但是您需要研究它才能理解和应用它。

Sub KeepCodes()
    Dim rngToSearch As Range
    Dim rng As Range
    'Tools References - Microsoft VBScript Regular Expressions 5.5
    Dim rgx As New VBScript_RegExp_55.RegExp
    Dim matches As Variant, match As Variant
    Dim strTemp As String

    rgx.Pattern = "[A-Z]+\d{1,4}"
    'rgx.IgnoreCase = True
    rgx.Global = True
    Application.ScreenUpdating = False
    Set rngToSearch = Range("A1").CurrentRegion
    For Each rng In rngToSearch
        strTemp = ""
        Set matches = rgx.Execute(rng.Value)
        For Each match In matches
            strTemp = strTemp & match.Value & ","
        Next match
        If Len(strTemp) > 0 Then
            rng.Offset(0, 1).Value = Left(strTemp, Len(strTemp) - 1)
        End If
    Next rng
    Application.ScreenUpdating = True
End Sub

阅读这篇MSDN 正则表达式文章。

于 2013-07-02T19:05:12.433 回答