如何从单元格中删除少于3个字符的单词?

时间:2019-09-20 22:06:21

标签: regex excel vba text-mining

我正在尝试在Tableau中创建词云,但是我需要先准备Excel中的数据。我已经删除了所有不是字母数字的字符。但是,现在我想删除不,不是或不是这样的词。

老实说,我只想删除所有少于3个字符的单词。我使用VBA尝试了以下两段代码。

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

但是这创建了一个错误,提示Active X无法创建组件。

我尝试的第二件事是这样:

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

这只是什么都不做。我选择一个仅包含纯文本的单元格。我转到“运行宏”,然后选择它并单击“运行”。什么都没发生。

我在做什么错了?

谢谢!

1 个答案:

答案 0 :(得分:0)

第二个宏在 A1 A10 范围内工作,而不是您拥有Selected的单元格。

也替换:

    If Len(stringArray(i)) > 3 Then

具有:

    If Len(stringArray(i)) > 2 Then

保留3个字符的单词。