我在特定列中有一些单元格,其中包含字母数字文本以及其他单词或数字。
单元格的示例以粗体显示:
底部: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
我很感激任何答案。提前致谢。