Excel-VBA:使;替换“;功能更具体
我现在遇到了一个似乎不难解决的问题,但是,我找不到一个干净的方法来自己解决 我正在使用“Replace”函数更改用户键入的句子中的某些表达式。例如,如果用户键入“va”,我希望它改为“V.A”,这样它将更容易与我的数据库匹配,以便进行进一步的操作 以下是我的简单代码:Excel-VBA:使;替换“;功能更具体,excel,vba,replace,Excel,Vba,Replace,我现在遇到了一个似乎不难解决的问题,但是,我找不到一个干净的方法来自己解决 我正在使用“Replace”函数更改用户键入的句子中的某些表达式。例如,如果用户键入“va”,我希望它改为“V.A”,这样它将更容易与我的数据库匹配,以便进行进一步的操作 以下是我的简单代码: sMain.Range("J3").Replace "VA", "V. A." 它工作得很好。 问题是,它不仅将“VA”作为一个单独的表达,而且还将其作为单词的一部分 所以如果我的用户输入“梵蒂冈”,它会变成:“V.A.tica
sMain.Range("J3").Replace "VA", "V. A."
它工作得很好。问题是,它不仅将“VA”作为一个单独的表达,而且还将其作为单词的一部分 所以如果我的用户输入“梵蒂冈”,它会变成:“V.A.tican”。。。我当然不想要 <>你知道如何容易地指定我的代码,使它只考虑替换<强>整字< /强>匹配表达式吗?(我有几十行这样的替换,因此理想情况下,最好直接对“替换”功能进行操作——如果可能的话) 提前谢谢 这样做:
sMain.Range("J3").Replace " VA ", "V. A."
然后处理原始字符串以VA开头或结尾的情况
此外,处理所有分隔符的情况,例如制表符、空格或逗号。
为此:
const nSep As Integer = 3
Dim sep(nSep) As String
sep(1) = " "
sep(2) = vbTab
sep(3) = ","
for i=1 to nSep
for j=1 to nSep
sMain.Range("J3").Replace sep(i) & "VA" & sep(j), "V. A."
next
next
这样做:
sMain.Range("J3").Replace " VA ", "V. A."
然后处理原始字符串以VA开头或结尾的情况
此外,处理所有分隔符的情况,例如制表符、空格或逗号。
为此:
const nSep As Integer = 3
Dim sep(nSep) As String
sep(1) = " "
sep(2) = vbTab
sep(3) = ","
for i=1 to nSep
for j=1 to nSep
sMain.Range("J3").Replace sep(i) & "VA" & sep(j), "V. A."
next
next
可以将其拆分并检查每个单词。我已经把它变成了一个易于使用和灵活的功能
Function ReplaceWordOnly(sText As String, sFind As String, sReplace As String) As String
On Error Resume Next
Dim aText As Variant, oText As Variant, i As Long
aText = Split(sText, " ")
For i = 0 To UBound(aText)
oText = aText(i)
' Check if starting with sFind
If LCase(Left(oText, 2)) = LCase(sFind) Then
Select Case Asc(Mid(oText, 3, 1))
Case 65 To 90, 97 To 122
' obmit if third character is alphabet (checked by ascii code)
Case Else
aText(i) = Replace(oText, sFind, sReplace, 1, -1, vbTextCompare)
End Select
End If
Next
ReplaceWordOnly = Join(aText, " ")
End Function
示例输出:
?ReplaceWordOnly("there is a vatican in vA.","Va","V. A.")
there is a vatican in V. A..
可以将其拆分并检查每个单词。我已经把它变成了一个易于使用和灵活的功能
Function ReplaceWordOnly(sText As String, sFind As String, sReplace As String) As String
On Error Resume Next
Dim aText As Variant, oText As Variant, i As Long
aText = Split(sText, " ")
For i = 0 To UBound(aText)
oText = aText(i)
' Check if starting with sFind
If LCase(Left(oText, 2)) = LCase(sFind) Then
Select Case Asc(Mid(oText, 3, 1))
Case 65 To 90, 97 To 122
' obmit if third character is alphabet (checked by ascii code)
Case Else
aText(i) = Replace(oText, sFind, sReplace, 1, -1, vbTextCompare)
End Select
End If
Next
ReplaceWordOnly = Join(aText, " ")
End Function
示例输出:
?ReplaceWordOnly("there is a vatican in vA.","Va","V. A.")
there is a vatican in V. A..
请注意,您必须处理VA位于字符串开头或结尾的情况。在所有分隔符上使用一个循环就可以了。请注意,您必须处理VA位于字符串开头或结尾的情况。所有分隔符字符上的单个循环应该可以完成此操作。