您能幫助我通過將通過單元格A3:A50的循環並用新值替換整個單元格。Excel VBA:將整個單元格替換爲值
參考以下:
[ITA-IT]到IT
[JPN]到JA
[POR-BR]到PTBR
[溫泉-ES]到ES
等
感謝的提示!
您能幫助我通過將通過單元格A3:A50的循環並用新值替換整個單元格。Excel VBA:將整個單元格替換爲值
參考以下:
[ITA-IT]到IT
[JPN]到JA
[POR-BR]到PTBR
[溫泉-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-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
編輯 - 去與原著的精神,但滿足字符串中的匹配的要求,我換成案例與如果ELSEIF系列一樣使用和通配符匹配。注意爲了匹配方括號(假定這是你的意思),我必須將它們放在方括號中。我還修改了參考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
好像你需要一個for循環和 –
裏面的select case語句你當前使用的代碼在哪裏? – braX
爲什麼'[por-BR]'變成'PTBR'?沒有任何有效的規則=> * ctrl * + * H *或手動執行可能會更快... –