2017-08-14 128 views
1

我有以下代碼在Excel中循環 - 查找和替換

Sub CleanCat() 
Dim i As Integer 

For i = 1 To 50 

    Columns("A").Replace What:="Cat" & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
    Columns("A").Replace What:="Cat " & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
    Columns("A").Replace What:="Category " & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
    Columns("A").Replace What:="Category" & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 

    Columns("A").Replace What:="cat" & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
    Columns("A").Replace What:="cat " & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
    Columns("A").Replace What:="category " & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
    Columns("A").Replace What:="category" & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 

Next              
End Sub 

我想通過在A列中的每一個細胞中循環,並做所示的替代品(我循環通過微博),但是這並未不會取代一切。我得到的東西,如something cat 13 here

例鳴叫:

@thisaccount I nominate @thataccountfor category 12 #somehashtag 
Cat 12 I nominate @thisaccount #somehashtag 

任何想法?

+0

我的猜測是,「空間」是不是一個真正的空間,但看起來像一個空間,另一個字符。 –

+0

'cat 13'與'cat13'不一樣,你應該向後循環,以便替換'cat 1'不會替代'cat 13'。 – Jeeped

+0

要添加到@ScottCraner所說的內容,請在進入循環之前嘗試使用'Columns(「A」),替換What:= chr(160),Replacement:= chr(32))。 – Jeeped

回答

1

這是你應該要求的。

Option Explicit 

Sub CleanCat() 
    Dim i As Long 

    With Worksheets("sheet1") 
     .Columns("A").Replace What:=Chr(160), Replacement:=Chr(32), LookAt:=xlPart 
     For i = 50 To 1 Step -1 

      .Columns("A").Replace What:="Cat" & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
      .Columns("A").Replace What:="Cat " & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
      .Columns("A").Replace What:="Category " & i, Replacement:="Category" & i, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 

     Next i 
    End With 
End Sub 

enter image description here

我的採樣數據用創建,

=CHOOSE(RANDBETWEEN(1, 3), "cat", "Cat", "category")&CHOOSE(RANDBETWEEN(1, 3), TEXT(,), CHAR(32), CHAR(160))&RANDBETWEEN(1, 50) 
+0

你真的需要循環嗎,我們是不是用''Category''替換'Cat','Cat'和'Category''?數字不一樣嗎?或者我錯過了什麼。 –

+0

不,從我看到的編號類別中迭代'i'。但我明白你的意思,這可能會奏效。 (實際上,它看起來像它在你的反應) – Jeeped

+0

我仍然得到這樣的東西剩下的東西:'...類別12 ...'我正在循環通過有&符號,哈希等tweets應該這樣嗎? – pee2pee

2

而不數目循環的另一種選擇。 (注意:我建立在@ Jeeped的答案上)

它還將單詞放在數組中以方便更新。

Sub CleanCat() 
    Dim i As Long 
    Dim srch() As Variant 
    Dim srchPart As Variant 

    srch = Array("Category ", "Category", "Cat ", "Cat") ' make sure this is in order longest to shortest. 

    With Worksheets("Sheet1") 
     .Columns("A") = .Evaluate("INDEX("'" & A:A,)") 
     .Columns("A").Replace What:=Chr(160), Replacement:=Chr(32), LookAt:=xlPart 

     For Each srchPart In srch 
      .Columns("A").Replace What:=srchPart, Replacement:="}}}}", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
     Next srchPart 

     .Columns("A").Replace What:="}}}}", Replacement:="Category", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
    End With 
End Sub 

我還偷@ Jeeped的公式測試:

enter image description here