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

Excel宏-删除以某些字符开头的单词,excel,vba,Excel,Vba,在Excel的VB宏中,如何删除以某个字符串开头的单词的所有出现项 例如: 字符串显示:xxxx$AUD543.43 yyyy 我想搜索以$AUD开头的字符串中的任何内容,并在下一个空格前删除整个单词 因此,上述示例应导致: xxxx-yyyy如果我不提醒您,希望您展示“您(已经)尝试过的东西”,那将是我的失职。(我这样做是为了避免回答这个问题而被人大喊大叫。)我的职责已经完成,现在我开始着手 实际上,您不一定需要VBA代码来实现这一点;您可以使用Find()函数来完成这项工作,尽管它比较笨拙,

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

例如:

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

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

因此,上述示例应导致:


xxxx-yyyy

如果我不提醒您,希望您展示“您(已经)尝试过的东西”,那将是我的失职。(我这样做是为了避免回答这个问题而被人大喊大叫。)我的职责已经完成,现在我开始着手

实际上,您不一定需要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

如果我不提醒你,你希望展示“你(已经)尝试过的东西”,那就是我的失职。(我这样做是为了避免回答这个问题而被人大喊大叫。)我的职责已经完成,现在我开始着手

实际上,您不一定需要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

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

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

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

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

使用正则表达式。在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

使用正则表达式。在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

我的示例用于删除单元格的最后几个字

例如:

在单元格A1中:
ABCDE[Acct:12345]

在单元格A2中:
FGHIJ[Acct:67890]

在单元格A3中:
KLMNO

要删除所有以“[Acct:”开头的单词,请注意并非每个单元格都包含“[Acct:”

现在在B列中插入下面的函数,它将返回左侧的单词“[Acct:” =左(A1,查找(“[Acct:”,A1)-1)

结果:A B ABCDE[Acct:12345]ABCDE FGHIJ[账户:67890]FGHIJ KLMNO#值! 现在在C列中,插入下面的函数,这将检查B列是否为#VALUE!,然后返回我们想要的 =如果(ISERROR(C1)=真,A1,B1))

结果:

     A                          B                C

   ABCDE[Acct:12345]          ABCDE            ABCDE

   FGHIJ[Acct:67890]          FGHIJ            FGHIJ

   KLMNO                      #VALUE!          KLMNO

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

我的示例用于删除单元格的最后几个字

例如:

在单元格A1中:
ABCDE[Acct:12345]

在单元格A2中:
FGHIJ[Acct:67890]

在单元格A3中:
KLMNO

要删除所有以“[Acct:”开头的单词,请注意并非每个单元格都包含“[Acct:”

现在在B列中插入下面的函数,它将返回左侧的单词“[Acct:” =左(A1,查找(“[Acct:”,A1)-1)

结果:A B ABCDE[Acct:12345]ABCDE FGHIJ[账户:67890]FGHIJ KLMNO#值! 现在在C列中,插入下面的函数,这将检查B列是否为#VALUE!,然后返回我们想要的 =如果(ISERROR(C1)=真,A1,B1))

结果:

     A                          B                C

   ABCDE[Acct:12345]          ABCDE            ABCDE

   FGHIJ[Acct:67890]          FGHIJ            FGHIJ

   KLMNO                      #VALUE!          KLMNO

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

正则表达式有人吗?正则表达式有人吗?+1但对于经验较少的VBA用户,使用后期绑定更容易实现。+1但对于经验较少的VBA用户,使用后期绑定更容易实现。t格式不好…两个公式是1)=左(A1,查找([Acct:,A1)-1)…2)=如果(ISERROR(C1)=真,A1,B1))格式不好…两个公式是1)=左(A1,查找([Acct:,A1)-1)…2)=如果(ISERROR(C1)=真,A1,B1))