你能帮我解决通过单元格A3:A50并用新值替换整个单元格的循环。
以下参考:
[ita-IT] 到 IT
[jpn] 到 JA
[por-BR] 至 PTBR
[spa-ES] 到 ES
等
感谢您的提示!
答案 0 :(得分:3)
尝试:
Sub ReplaceValues()
Dim r As Range
Dim v() As Variant
Dim i As Integer
v = [{"ita-IT","IT";"jpn","JA";"por-BR","PTBR";"spa-ES","ES"}]
Set r = ActiveSheet.Range("A3:A50")
For i = LBound(v) To UBound(v)
r.Replace what:=v(i, 1), replacement:=v(i, 2), lookat:=xlWhole, MatchCase:=False
Next i
End Sub
编辑: 有50个(或更多)替换对没有问题,但通过将它们存储在工作簿中的表中而不是将它们列在VBA数组中,这将更容易管理:
您可以使用通配符替换在查找值之前/之后具有文本的单元格内容。因此,结合这些更改,您的代码现在变为:
Sub ReplaceValues2()
Dim r As Range
Dim v() As Variant
Dim i As Integer
v = Sheet1.ListObjects("tbReplacement").DataBodyRange
Set r = ActiveSheet.Range("A3:A50")
For i = LBound(v) To UBound(v)
r.Replace What:="*" & v(i, 1) & "*", Replacement:=v(i, 2), LookAt:=xlWhole, MatchCase:=False
Next i
End Sub
答案 1 :(得分:1)
这是一种方法。如果你有很多代码需要替换,它可能看起来像意大利面条,如果有替换的逻辑,那么构建逻辑会很好,但是它会按照你的要求做,而且我希望是可读的。
Sub ReplaceStrings()
Dim result As String
For Each myCell In Range("A3:A50")
Select Case myCell.Value
Case "[ita-IT]"
result = "IT"
Case "[jpn]"
result = "JA"
Case "[por-BR]"
result = "PTBR"
Case "[spa-ES]"
result = "ES"
Case Else
result = myCell.Value
End Select
myCell.Value = result
Next myCell
End Sub
编辑 - 为了符合原始精神,但为了满足字符串中匹配的要求,我用If Elseif系列替换了Case并使用了Like和通配符来匹配。注意为了匹配方括号(假设这是你的意思),我不得不将它们括在方括号中。我还修改了参考ActiveSheet是安全的,借鉴另一个答案(我不批评,只是展示另一种思考方式)。
Sub ReplaceStrings()
Dim result, s As String
For Each myCell In ActiveSheet.Range("A3:A50")
s = myCell.Value
If s Like ("*[[]ita-IT[]]*") Then
result = "IT"
ElseIf s Like "*[[]jpn[]]*" Then
result = "JA"
ElseIf s Like "*[[]por-BR[]]*" Then
result = "PTBR"
ElseIf s Like "*[[]spa-ES[]]*" Then
result = "ES"
Else
result = s
End If
myCell.Value = result
Next myCell
End Sub