1

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

例如:

字符串内容如下:xxxx $AUD543.43 yyyy

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

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

xxxx yyyy

4

4 回答 4

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
于 2012-12-04T14:12:45.783 回答
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
于 2012-12-04T10:37:16.487 回答
1

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

=TRIM(LEFT(A1,FIND("$AUD",A1)-1))&RIGHT(A1,LEN(A1)-FIND(" ",A1,FIND("$AUD",A1))+1)
于 2012-12-04T12:19:33.733 回答
0

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

例如:

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

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

在单元格 A3 中: KLMNO

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

现在在 B 列中,插入下面的函数,这将返回 "[Acct:" =LEFT(A1,FIND("[Acct:",A1)-1) 左侧的单词

结果:AB ABCDE[Acct:12345] ABCDE FGHIJ[Acct: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 将是您想要的最终结果。

于 2013-08-16T15:01:47.240 回答