Excel VBA从字符串中删除少于3个字符的单词?

时间:2014-06-23 16:19:44

标签: excel vba excel-vba

几乎所有标题都说明了,但我一直在寻找如何做到以下几点 我在A列中列出了大约100,000个字符串

"Hello My Name is"
"Delta Tango Foxtrot At"
"bing bong so"

我只需要返回相同的字符串但没有长度小于3个字符的单词

所以我将离开:

"Hello Name"
"Delta Tango Foxtrot"
"bing bong"

任何想法?因为我已经通过论坛和谷歌进行了一些搜索,但找不到我需要的内容

2 个答案:

答案 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