Excel VBA:用值替换整个单元格
你们能帮我做一个循环吗?它将通过A3:A50单元格,并用一个新值替换整个单元格 参考资料如下: [ita IT]到IT [jpn]至JA [por BR]至PTBR [spa ES]至ES 等等 谢谢你的提示 试试看:Excel VBA:用值替换整个单元格,vba,excel,Vba,Excel,你们能帮我做一个循环吗?它将通过A3:A50单元格,并用一个新值替换整个单元格 参考资料如下: [ita IT]到IT [jpn]至JA [por BR]至PTBR [spa ES]至ES 等等 谢谢你的提示 试试看: Sub ReplaceValues() Dim r As Range Dim v() As Variant Dim i As Integer v = [{"ita-IT","IT";"jpn","JA";"por-BR","PTBR";"spa-
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
这里有一个方法。如果你有很多代码来替换它,它可能看起来像意大利面条,如果替换有一个逻辑,那么在逻辑中构建它会很好,但是它符合你的要求,我希望它是可读的
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系列替换了大小写,并使用Like和通配符进行匹配。注:为了匹配方括号(假设这是您的意思),我必须将它们括在方括号中。为了安全起见,我还修改了参考活动表的内容,并借鉴了另一个答案(我不是在批评,只是展示了另一种思考方式)
似乎您需要一个带有select case语句的for循环您当前使用的代码在哪里?为什么
[por BR]
会变成PTBR
?没有任何有效的规则=>ctrl+H或手动执行可能会更快…替换对有限制吗?我需要50双或者更多。您还可以调整代码以替换整个单元格的内容吗?e、 g.randomtext[ita-IT]randomtext到它的一些东西,如替换和删除所有其他内容我已经编辑了我的答案以适应您更改的要求使用v=[{“ita-IT”,“IT”;“jpn”,“JA”;“por-BR”,“PTBR”;“spa-ES”,“ES”}]
样式的数组初始化-限制为255个字符。(但这只是将表格存储在工作簿中的另一个原因。)我在考虑一个代码,如果有我要查找的字符串,它将检查单元格的内容,例如randomText[spa ES]randomText>,然后用ESsomething替换整个单元格的内容,如替换并删除所有内容elsedone,但如果有50对,这将变得难以阅读和恼人
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