2017-12-22 10 views
2

Ich habe ein Blatt, das ich die Leerzeichen entfernen muss, damit ich es vergleichen kann Ich verwende eine Funktion, die ich hier gefunden habe und ein Sub, das alle Werte in ein Array (für Geschwindigkeit) Aber ich kann es nicht funktionieren, keine Ahnung warum. Ich erhalte eineEntfernen Sie Leerzeichen in einer einzigen Spalte

ByRef Argument Typenkonfliktfehler

Public Function RemoveWhiteSpace(target As String) As String 
    With New RegExp 
     .Pattern = "\s" 
     .MultiLine = True 
     .Global = True 
     RemoveWhiteSpace = .Replace(target, vbNullString) 
    End With 
End Function 


Sub stringRangeToClean() 

Dim r As Variant 
Dim i As Long 

r = ActiveWorkbook.Sheets("Trent BASE DATA").UsedRange 

For i = 2 To UBound(r) 

     r(i, 10).Value2 = RemoveWhiteSpace(r(i, 10)) 

Next i 

End Sub 

nun versuchen, dies habe ich den col ich tatsächlich realisiert wird (I, 9) aber im immer einen Fehler benutzerdefinierten Typ Fehler auf die RegExp Linie

Public Function RemoveWhiteSpace(target As String) As String 

    With New RegExp 
     .Pattern = "\s" 
     .MultiLine = True 
     .Global = True 
     RemoveWhiteSpace = .Replace(target, vbNullString) 
    End With 
End Function 

Sub stringRangeToClean() 

Dim r As Variant 
Dim i As Long 
Dim txt As String 


r = ActiveWorkbook.Sheets("Trent BASE DATA").UsedRange 

For i = 2 To UBound(r) 

     txt = r(i, 9) 
     txt = RemoveWhiteSpace(txt) 

Next i 

End Sub 
+0

wo sind die Kommentare gegangen? – Leighholling

+2

Sie entfernen nur Leerzeichen? Dies kann mit einer einzigen Codezeile erfolgen: 'ActiveWorkbook.Sheets (" Trent BASE DATA "). Cells.Replace" ", vbNullString' – tigeravatar

+0

Nein Ich möchte nur Leerzeichen in Spalte (I, 10) oder Spalte I aber entfernen nur wenn dort ein Wert drin ist, deshalb habe ich den .usedRange benutzt und eine Schleife benutzt, um das Blatt runterzugehen und den Offset (0,10) des Bereichs – Leighholling

Antwort

6

Hier gehen Sie, keine Regex für das Entfernen von Leerzeichen erforderlich. Ihre Hauptherausforderung ist nur Ihre Auswahl, die grundlegende VBA ist:

Sub tgr() 

    With ActiveWorkbook.Sheets("Trent BASE DATA") 
     .Range("J2", .Cells(.Rows.Count, "J").End(xlUp)).Replace " ", vbNullString 
    End With 

End Sub 
+0

Ich denke auf diese Weise, wenn ich eine leere Zelle auf halbem Weg habe wird aufhören – Leighholling

+1

Hast du es tatsächlich versucht? Du solltest es versuchen. – tigeravatar

+0

ja es funktioniert jetzt ive wählte die richtige Spalte Dank – Leighholling

2

wie Try this:

Public Function RemoveWhiteSpace(target As String) As String 

    Dim RegExp As Object 
    Set RegExp = CreateObject("VBScript.RegExp") 

    With RegExp 
     .Pattern = "\s" 
     .MultiLine = True 
     .Global = True 
     RemoveWhiteSpace = .Replace(target, vbNullString) 
    End With 
End Function 

Auf diese Weise verwenden Sie eine späte Bindung für die Variable regExp, daher müssen weder Sie noch Ihre Benutzer eine zusätzliche Bibliothek hinzufügen.

Wenn Sie die frühe Bindung verwenden möchten, sollten Sie die Bibliothek Microsoft VBScript Regular Expressions 5.5" zu denen hinzufügen, die VBA verwendet. Die frühe Bindung gibt Ihnen einen gewissen Zeitbonus und bietet IntelliSense.


Hier wird die gewählte Antwort erklärt Schritt-für-Schritt, wie Sie die Bibliothek hinzufügen:

How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops


Code Betreffend - das ist sehr einfach Schleife, versuchen Sie es zu tun:

Sub StringRangeToClean() 

    Dim r   As Variant 
    Dim myCell  As Range 

    r = ActiveWorkbook.Sheets("Trent BASE DATA").UsedRange   
    For Each myCell In r 
     myCell = RemoveWhiteSpace(txt) 
    Next myCell 

End Sub 

Auf diese Weise würde jede Zelle untersucht und die Leerräume entfernt werden ed.

+0

Dies hat meine RegEx Fehler behoben, aber es ist nicht Leerzeichen entfernen – Leighholling

+0

@Leighholling - siehe die Code in der Bearbeitung. – Vityata

+0

Ich möchte nur Leerzeichen in Spalte J – Leighholling

Verwandte Themen