Excel宏 - 删除以某些字符开头的单词

时间:2012-12-04 10:08:56

标签: excel vba

在Excel的VB宏中,如何删除以某个字符串开头的单词的所有出现?

例如:

字符串显示为:xxxx $AUD543.43 yyyy

我想搜索以$AUD开头的字符串中的任何内容,并在下一个空格之前删除整个单词

所以上面的例子应该导致:

xxxx yyyy

4 个答案:

答案 0 :(得分:2)

使用正则表达式。在VBA中添加对Microsoft VBScript正则表达式的引用>>工具>>选项。

Dim txt As String
txt = "$Audthisfew is$Aud $Auda test $Aud"

Set regEx = New RegExp

With regEx
    .Global = True
    .Pattern = "((^, )\$Aud)"
    Debug.Print .Replace(txt, "")
End With

答案 1 :(得分:1)

如果不提醒你期望你表现出“你曾经尝试过的东西”,那将是我的疏忽。 (我这样做是为了避免让我因为回答这个问题而大喊大叫。)我的责任已经完成,我现在继续谈谈。

您实际上不一定需要VBA代码来执行此操作;你可以用Find()函数做到这一点,虽然更笨拙,我不推荐它用于一个非常大的工作表。仍然是你指定的VBA代码,你应该拥有。更改范围以匹配您要搜索的范围。另外,你应该注意到你的例子中x和y之间只有一个空格,但这与你的请求不同,即以$ AUD开头并在下一个空格之前结束。如果您只想要一个空格,请相应调整公式。

Sub ReplaceText()

Dim rng As Excel.Range
Dim s_Contents As String
Dim l_FindAUD As Long, l_FindSpace As Long

For Each rng In ActiveSheet.UsedRange

    s_Contents = rng.Value

    'Does the $AUD expression exist in this cell?
    l_FindAUD = InStr(1, s_Contents, "$AUD", vbTextCompare)

    If l_FindAUD > 0 Then

        'If so, is it followed by a space?
        l_FindSpace = InStr(l_FindAUD, s_Contents, " ")

        If l_FindSpace > 0 Then

            'If so, take all of the content up to but not including the $
            'and all of the contents from the space onwards, merge them
            'together and write to the cell.
            s_Contents = Left$(s_Contents, l_FindAUD - 1) & Mid$(s_Contents, l_FindSpace)
            rng.Value = s_Contents
        End If

    End If

Next


End Sub

答案 2 :(得分:1)

虽然不完全符合您的要求,但您也可以使用Excel公式来实现这一目标。假设您的文本在A1中,则公式为:

=TRIM(LEFT(A1,FIND("$AUD",A1)-1))&RIGHT(A1,LEN(A1)-FIND(" ",A1,FIND("$AUD",A1))+1)

答案 3 :(得分:0)

我的例子用于删除单元格的最后几个单词

例如:

单元格A1中的

ABCDE[Acct:12345]

单元格A2中的

FGHIJ[Acct:67890]

单元格A3中的

KLMNO

想删除所有以“[Acct:”开头的单词,注意不是每个单元格都包含“[Acct:”

现在在B栏中插入以下功能,这将返回“[Acct:”上左侧的单词 = LEFT(A1,FIND( “[科目:”,A1)-1)

结果:A B.        ABCDE [帐号:12345] ABCDE        FGHIJ [帐号:67890] FGHIJ        KLMNO #VALUE! 现在在C列中,插入下面的函数,这将检查B列是否为#VALUE!然后以我们想要的回报 = IF(ISERROR(C1)= TRUE,A1,B1))

结果:

     A                          B                C

   ABCDE[Acct:12345]          ABCDE            ABCDE

   FGHIJ[Acct:67890]          FGHIJ            FGHIJ

   KLMNO                      #VALUE!          KLMNO

然后你可以复制三列并粘贴值,删除列A和B,列C将是你想要的最终结果。