Excelmacros – 删除以特定字符开头的单词

在Excel的VBmacros中,如何删除以某个string开始的单词的所有出现?

例如:

该string显示: xxxx $AUD543.43 yyyy

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

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

xxxx yyyy

对我来说,不提醒你的是,你performance出“你试过的东西”的期望。 (为了回答这个问题,我是这样做的,以避免我被大吼大叫)。我的职责就这样完成了,现在我继续前进。

你实际上不一定需要VBA代码来做到这一点; 你可以用Find()函数来做,尽pipe更笨拙,我不会推荐它用于一个非常大的工作表。 不过,你已经指定了VBA代码,而且你应该有。 更改范围以匹配您将要search的范围。 另外,你应该注意,在你的例子中,在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 

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

 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 

虽然不完全是你所要求的,但你也可以使用Excel公式来实现这一点。 假设你的文本是在A1,公式将是:

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

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

例如:

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

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

在小区A3: KLMNO

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

现在在B列插入下面的函数,这将返回“[Acct:”= LEFT(A1,FIND(“[Acct:”,A1)-1)

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

结果:

  ABC ABCDE[Acct:12345] ABCDE ABCDE FGHIJ[Acct:67890] FGHIJ FGHIJ KLMNO #VALUE! KLMNO 

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