【发布时间】:2013-06-30 06:10:01
【问题描述】:
我在特定列中有一些单元格,其中包含字母数字文本以及其他单词或数字。
单元格示例以粗体:
底部:J103 注 13
我想删除 BOTTOM:、NOTE 和 13 但保留 J103
J103 的文本可能包含多个字母和 1 到 4 个数字,但它们总是会组合在一起,并以特定行的相同字母开头。有些单元格只有我想保留的文本,但会用逗号分隔。满足此条件的单元格将被忽略,如下所示。
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
感谢任何答案。提前致谢。
【问题讨论】:
-
是的,对不起。办公室 2007。
-
您可以使用正则表达式来执行此操作:tmehta.com/regexp
标签: excel alphanumeric