Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1540to1544
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Alle Sonderzeichen in Bereich löschen

Alle Sonderzeichen in Bereich löschen
23.02.2017 13:49:52
Basti
Servus Forum,
ich bentötige schon wieder Hilfe.
Meine Exportdatai enhält Sonderzeichen und ich verwende den Inhalt für meine Windowsordnernamen. Daher habe ich versucht einen VBA-Code zu basteln, der alle Sonderzeichen nach einer Vorbotsliste löscht.
Am Anfang & Ende vom String sollen Sonderzeichen einfach gelöschen werden. Die Sonderzeichen Dazwischen sollen durch "_" ersetzt werden.
Bsp. >*A>*B>*C>* wird zu A_B_C
Anbei meine Anfänge. Allerdings löscht dieser Ablauf gerade den gesamten markierten Bereich.
Public Sub SondZeichloeschen2()
Dim C As Range
Dim n As Integer
Dim Temp, Verboten As String
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
For Each C In Selection
With C
Verboten = "\/:*?""|]*_ "
Temp = ""
For n = 1 To Len(Verboten)
Temp = Replace(Temp, Mid(Verboten, n, 1), "")
Next
.Value = Temp
End With
Next C
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Danke für die Hilfe
Gruß
Basti

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle Sonderzeichen in Bereich löschen
23.02.2017 16:15:39
Piet
Hallo,
nach meiner Ansicht geht das am besten über 2 Schleifen, wobei du die Selection selbst festlegen kannst.
Ich empfehle zuerst die Sonderzeichen am Anfang und Ende einfach abschneiden, und dann Replace einsetzen.
Probier es einfach mal aus. Der untere Code ist aber ungetestet!! Bitte zuerst in einer Testdatei probieren.
mfg Piet
Public Sub SondZeichloeschen2()
Dim C As Range
Dim n As Integer
Dim Temp, Verboten As String
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Verboten = "\/:*?""|]*_ "
'1. Schleife rechts und links einfach abschneiden
For Each C In Selection
For n = 1 To Len(Verboten)
If Left(C, 1) = Mid(Verboten, n, 1) Then _
C.Value = Right(C, Len(C) - 1)
If Right(C, 1) = Mid(Verboten, n, 1) Then _
C.Value = Left(C, Len(C) - 1)
Next n
Next C
'2. Schleife im String auswechseln
For Each C In Selection
For n = 1 To Len(Verboten)
If InStr(C, 1) = Mid(Verboten, n, 1) Then _
C.Value = Replace(C, Mid(Verboten, n, 1), "_")
Next n
Next C
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

Anzeige
AW: Alle Sonderzeichen in Bereich löschen
23.02.2017 21:08:07
Anton
Hallo Basti,
hab auch noch einen Vorschlag mit RegExp:
Sub ZeichenErsetzen()
Dim c As Range
Dim wksBlatt As Worksheet
Dim strPattern As String
Dim strGesamt As String
Dim y As Long
Dim regex As Object
y = 1
Set regex = CreateObject("VBScript.RegExp")
Set wksBlatt = ThisWorkbook.Worksheets("Tabelle2") 'Tabellenblatt anpassen
With regex
.Pattern = "\\|\/|\:|\?|\|\||\]|\*|\_"
.Global = True
End With
With wksBlatt
For Each c In Selection
strPattern = ""
strGesamt = ""
For i = 1 To Len(c)
If regex.Test(Mid(c, i, 1)) = True Then
strPattern = strPattern & regex.Replace(Mid(c, i, 1), "_")
Else
strGesamt = strGesamt & strPattern & Mid(c, i, 1)
strPattern = ""
End If
Next i
strGesamt = strGesamt & strPattern
.Cells(y, 3).Value = strGesamt 'Spalte für Ausgabe anpassen
y = y + 1
Next c
End With
End Sub
VG Anton
Anzeige
AW: Alle Sonderzeichen in Bereich löschen
24.02.2017 08:02:06
Basti
Servus Piet, Servus Anton,
zunächst einmal vielen Dank für Eure Hilfe.
Leider haben beide Codes den "bug", dass sie "löschen/ersetzen" von Sonderzeichen nur ausführen, wenn alle und auch in dieser Reihenfolge, wie in der Vorbotsliste, im String enthalten sind. Die Vorbotsliste ist also keine Auswahl sondern eine Zeichenfolge nach der explizit gesucht wird.
Habt Ihr evtl. noch eine Lösung zur Hand?
Gruß
Bastia
AW: Alle Sonderzeichen in Bereich löschen
24.02.2017 08:57:38
Anton
Guten Morgen Basti,
theoretisch müsstest Du dann nur das Pattern durch "\\\/:\*\?""\|\]\*_\s" ersetzen. Dann müssen aber alle Zeichen direkt hintereinander vorkommen. Ich kann es gerade nicht testen, da ich auf dem Mac Book kein Reg Exp Bibliothek zur Verfügung habe.
VG Anton
Anzeige
AW: Alle Sonderzeichen in Bereich löschen
24.02.2017 09:48:31
Basti
Hi Anton,
Irgendwie klappt es bei mir nicht.
Habe die Anpassung wie unten umgestzt, aber selbst wenn ich diese Zeichen in eine Zelle kopiere, dann funktionert die Prozedur nicht.
With regex
.Pattern = "\\\/:\*\?""\|\]\*_\s"
Noch Vorschläge?
Gruß
Basti
AW: Alle Sonderzeichen in Bereich löschen
24.02.2017 10:07:34
Daniel
Hi
mal ausgehend von deiner Datei, probiers mal so:
Public Sub SondZeichloeschen2()
Dim C As Range
Dim n As Integer
Dim Temp As String, Verboten As String
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Verboten = "\/:*?""|]_ "
For Each C In Selection.SpecialCells(xlCellTypeConstants, 1)
Temp = C.Value
For n = 1 To Len(Verboten)
Temp = Replace(Temp, Mid(Verboten, n, 1), " ")
Next
Temp = WorksheetFunction.Trim(Temp)
Temp = Replace(Temp, " ", "_")
C.Value = Temp
Next C
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
der Grund, warum bei dir alles gelöscht wird lieg darin, dass du am Anfang Temp = "" geschrieben hast, dh du übernimmst an keiner Stelle den Wert aus der Zelle.
es muss natürlich lauten: Temp = C.Value

Gruß Daniel
Anzeige
AW: Alle Sonderzeichen in Bereich löschen
24.02.2017 12:10:08
Basti
Servus Daniel,
danke für deine Mitarbeit. Mit deinem Hinweis und nachdem ich

.SpecialCells(xlCellTypeConstants, 1)
gelöscht habe, funktioniert es.
Wenn ich .specialCells im Ablauf lasse, dann kommt die Fehlermeldung '1004 - No celles were found'!
Public Sub SondZeichloeschen2()
Dim C As Range
Dim n As Integer
Dim Temp As String, Verboten As String
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Verboten = "\/:*?""|]._- "
For Each C In Selection
Temp = C.Value
For n = 1 To Len(Verboten)
Temp = Replace(Temp, Mid(Verboten, n, 1), " ")
Next
Temp = WorksheetFunction.Trim(Temp)
Temp = Replace(Temp, " ", "_")
C.Value = Temp
Next C
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Gruß
Basti
Anzeige
AW: Alle Sonderzeichen in Bereich löschen
24.02.2017 12:41:38
Daniel
Hi
sorry, der zweite Parameter muss auch eine 2 für Texte sein
mit 1 läuft das .specialCells über Zahlen (ich hoffe, du hast dir das .specialcells auch mal in der Hilfe angeschaut und nicht nur abgeschrieben)
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge