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