2017-08-14 1 views
1

Ich habe den folgenden CodeFOR-Schleife in Excel - Suchen und Ersetzen

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 

Was ich will, ist durch jede Zelle in Spalte A eine Schleife und tun die gezeigten Ersatz (I durch Tweets bin Looping), aber dieses doesn nicht alles ersetzen. Ich erhalte Sachen wie something cat 13 here

Beispiel Tweets links:

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

Irgendwelche Ideen?

+0

Meine Vermutung ist, dass der „Raum“ kein echter Raum ist aber ein anderer Charakter, der wie ein Raum aussieht. –

+0

'cat 13' ist nicht dasselbe wie' cat13' und Sie sollten rückwärts laufen, so dass 'cat1' nicht durch' cat13' ersetzt wird. – Jeeped

+0

Um hinzuzufügen, was @ScottCraner sagte, versuchen Sie 'Spalten (" A "). Ersetzen Sie was: = chr (160), Ersetzung: = chr (32))' vor dem Eintritt in die Schleife. – Jeeped

Antwort

1

Das ist alles, was Sie benötigen sollten.

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

Daten Meine Probe mit,

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

Brauchen Sie wirklich die Schleife, ersetzen wir nicht nur "Cat", "Cat" und "Category" durch "Category"? Bleibt die Nummer nicht gleich? Oder habe ich etwas vermisst. –

+0

Nein, "i" wird aus nummerierten Kategorien iteriert, wie ich es sehe. Aber ich verstehe, was du meinst, das könnte funktionieren. (eigentlich sieht es so aus, als wäre es in deiner Antwort) – Jeeped

+0

Ich bekomme immer noch Sachen wie diese übrig: '... Kategorie 12 ...' Ich bin in Tweets, die Ampersands, Hashes usw. haben. – pee2pee

2

Eine weitere Option, ohne die Anzahl Schleife erstellt wurde. (Anmerkung: Ich baute auf @ Jeepeds Antwort auf)

Es setzt auch die Wörter in ein Array für die einfachere Aktualisierung.

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 

Ich habe auch @ Jeeped der Formel Test:

enter image description here