几乎所有标题都说明了,但我一直在寻找如何做到以下几点 我在A列中列出了大约100,000个字符串
"Hello My Name is"
"Delta Tango Foxtrot At"
"bing bong so"
我只需要返回相同的字符串但没有长度小于3个字符的单词
所以我将离开:
"Hello Name"
"Delta Tango Foxtrot"
"bing bong"
任何想法?因为我已经通过论坛和谷歌进行了一些搜索,但找不到我需要的内容
答案 0 :(得分:2)
正则表达式版本:
Sub removeSmallWords()
ScreenUpdating = False
Dim rng As Range
Set rng = Range("A1:A10")
Dim oReg As Object
Set oReg = CreateObject("vbscript.regexp")
For Each cell In rng
With oReg
.Pattern = "(\s|^)(\w{1,2})(\s|$)"
.Global = True
cell.Value = .Replace(cell.Value, " ")
End With
cell.Value = Trim(cell.Value)
Next cell
Set oReg = Nothing
ScreenUpdating = True
End Sub
暴力循环的方式。对于大量数据来说,它会很慢,但会完成工作。
Sub removeSmallWords()
ScreenUpdating = False
Dim rng As Range
Set rng = Range("A1:A10")
Dim stringArray() As String
Dim newString As String
For Each cell In rng
newString = ""
stringArray = Split(cell.Text)
For i = 0 To UBound(stringArray)
If Len(stringArray(i)) > 3 Then
newString = newString & " " & stringArray(i)
End If
Next i
cell.Value = Trim(newString)
Next cell
ScreenUpdating = True
End Sub
P.S。向下投票可能是因为你没有表现出任何努力(代码)或遇到的问题。此外,当人们同时跨多个网站发帖提问时,人们不会太友好。
答案 1 :(得分:0)
怎么样:
Sub KillTheLittleOnes()
Dim N As Long, i As Long, s As String
Dim wf As WorksheetFunction, j As Long
Set wf = Application.WorksheetFunction
N = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To N
s = Cells(i, 1).Value
ary = Split(s, " ")
For j = LBound(ary) To UBound(ary)
If Len(ary(j)) < 3 Then
ary(j) = ""
End If
Next j
Cells(i, 1).Value = wf.Trim(Join(ary, " "))
Next i
End Sub