2017-08-14 141 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