2017-08-15 141 views
-3

您能幫助我通過將通過單元格A3:A50的循環並用新值替換整個單元格。Excel VBA:將整個單元格替換爲值

參考以下:

[ITA-IT]IT

[JPN]JA

[POR-BR]PTBR

[溫泉-ES]ES

感謝的提示!

+3

好像你需要一個for循環和 –

+1

裏面的select case語句你當前使用的代碼在哪裏? – braX

+0

爲什麼'[por-BR]'變成'PTBR'?沒有任何有效的規則=> * ctrl * + * H *或手動執行可能會更快... –

回答

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數組:

Table of replacement values

可以更換具有文本前/使用通配符您查找值後單元格內容。因此,結合這些更改,您的代碼現在變爲:

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 
+0

替換對有限制嗎?我需要有50對或許更多。你也可以調整代碼來將整個單元格的內容替換爲_replacement_?例如隨機文本[ITA-IT]隨機文本到IT – farb

+0

類似替換和刪除其他所有內容 – farb

+0

我編輯了我的答案以適應您的更改要求 – Olly

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 

編輯 - 去與原著的精神,但滿足字符串中的匹配的要求,我換成案例與如果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 
+0

我在想如果有一個字符串,我正在尋找一個代碼來檢查單元格的內容。隨機文本[Spa-ES] randomText>然後用ES替換整個單元格的內容 – farb

+0

類似替換和刪除其他所有的 – farb

+0

完成,但有50對,這會變得不可讀和煩人 –

相關問題