2017-03-08 3 views
1

Ich versuche, ein Makro zu erstellen, das mir ein Problem gibt, da ich keine Erfahrung habe und keine Ahnung, wo ich anfangen soll.Excel FInd und Replace Regex Makro

Alles, was ich versuche zu tun, ist ein Suchen und Ersetzen Makro, die einen Teil einer Zeichenfolge durch nichts ersetzen wird.

Zum Beispiel habe ich die folgenden Custom Field(Id) und alles, was ich will, dass der Marco zu tun ist, entfernen Sie alles außer Id.

Wie kann ich das erreichen?

-Code

Sub FindReplace() 

Dim sht As Worksheet 
Dim fndList As Variant 
Dim rplcList As Variant 
Dim x As Long 

fndList = Array("Custom field(", ")") 
rplcList = Array("", "") 

'Loop through each item in Array lists 
For x = LBound(fndList) To UBound(fndList) 
    'Loop through each worksheet in ActiveWorkbook 
    For Each sht In ActiveWorkbook.Worksheets 
     sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ 
     SearchFormat:=False, ReplaceFormat:=False 
    Next sht 
Next x 

End Sub 
+1

Ist 'Id' eine Zahl? –

+0

Nope Id ist ein String, ein anderes Beispiel wäre 'Custom field (Status)' wo ich einfach 'Status' – dataMan

+0

behalten möchte, damit mein' Solution1' in beiden Fällen funktioniert. Sie können einen VBA-Code erstellen, der '' Find And Replace "' die Zeichenfolge 'Custom Feld (' für 'nichts' und' 'Find and Replace" 'das Zeichen') 'für' nichts ' –

Antwort

1

Sie dies mit Find & Replace ohne regex erreichen können!

enter image description here

Solution1:

  1. Wählen Sie Ihre Daten
  2. Öffnen finden & Modul austauschen
  3. ersetzen "Custom Field(" für ""
  4. ")" Ersetzen für ""

Solution2:

Sie entweder die Formel in this site verwenden oder den VBA-Code in this site geschrieben verwenden, um alle nicht-numerischen Zeichen aus einer Zeichenfolge zu entfernen.

Sub RemoveNotNum() 
'Updateby20131129 
Dim Rng As Range 
Dim WorkRng As Range 
On Error Resume Next 
xTitleId = "KutoolsforExcel" 
Set WorkRng = Application.Selection 
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) 
For Each Rng In WorkRng 
    xOut = "" 
    For i = 1 To Len(Rng.Value) 
     xTemp = Mid(Rng.Value, i, 1) 
     If xTemp Like "[0-9]" Then 
      xStr = xTemp 
     Else 
      xStr = "" 
     End If 
     xOut = xOut & xStr 
    Next i 
    Rng.Value = xOut 
Next 
End Sub 
+0

aktualisiert Danke für die Antwort, es war sehr hilfreich, aber ich habe immer noch ein kleines Problem, dass, wenn ich das Makro laufen nichts passiert? Ich habe Ihre Suche nach einem Ersatzvorschlag in meinem Code geändert, aber wie gesagt, wenn ich es ausführe, ändert sich nichts? – dataMan

+1

Gelöst das Problem, stellt sich heraus, dass die Sicherheitsstufe zu hoch eingestellt war und die Marcos deaktiviert waren, nochmals danke – dataMan

0

Regexp/Variant Array Lösung

auch Griffe Situationen, in denen Benutzer mehrere Bereiche in dem Bereich auswählt.

Sub Retain() 
Dim X 
Dim rng1 As Range 
Dim rng2 As Range 
Dim objRegex As Object 
Dim lngRow As Long 
Dim lngCOl As Long 

On Error Resume Next 
Set rng1 = Application.InputBox("select range", , Selection.Address, , , , , 8) 
On Error GoTo 0 

If rng1 Is Nothing Then Exit Sub 

Set objRegex = CreateObject("vbscript.regexp") 
With objRegex 
    .Pattern = "[^0-9]" 
    .Global = True 
For Each rng2 In rng1.Areas 
If rng2.Cells.Count > 1 Then 
    X = rng2.Value2 
     For lngRow = 1 To UBound(X, 1) 
      For lngCOl = 1 To UBound(X, 2) 
       X(lngRow, lngCOl) = .Replace(X(lngRow, lngCOl), vbNullString) 
      Next 
     Next 
    rng2.Value2 = X 
Else 
    rng2.Value2 = .Replace(rng2, vbNullString) 
End If 
Next 
End With 

End Sub 
Verwandte Themen