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将是你想要的最终结果。