[英]Excel Macro- remove a word that starts with certain characters
在用于Excel的VB宏中,如何删除以某个字符串开头的单词的所有出现?
例如:
该字符串显示: xxxx $AUD543.43 yyyy
我想在以$AUD
开头的字符串中搜索任何内容,并在下一个空格之前删除整个单词
所以上面的例子应该导致:
xxxx yyyy
使用正则表达式。 在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代码才能执行此操作; 你可以用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)
我的例子用于删除单元格的最后几个单词
例如:
在单元格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))
结果:
A B C
ABCDE[Acct:12345] ABCDE ABCDE
FGHIJ[Acct:67890] FGHIJ FGHIJ
KLMNO #VALUE! KLMNO
然后你可以复制三列并粘贴值,并删除列A和B,列C将是你想要的最终结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.