Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1712to1716
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

Sonderzeichen auflisten

Sonderzeichen auflisten
25.09.2019 20:49:41
Christian
Hallo,
ich habe eine Bitte an euch, mir zu verraten wie ihr folgendes lösen würdet.
Ich habe Texte im Bereich A1:A12334.
Ich suche eine Auflistung aller Sonderzeichen, die in diesen Texten vorkommen.
Ohne Duplikate, also wenn 100mal ein Fragezeichen vorkommt, reicht es wenn das ? einmal in der Liste steht.
Keine Sonderzeichen sollen sein:
1. Alle 26 Buchstaben von A bis Z, Groß und Kleinschreibung egal.
2. Das Leerzeichen
3. Der Punkt
4. Der Bindestrich
Alles andere, auch Ä, Ö, Ü und ß soll als Sonderzeichen aufgelistet werden.
Hat da jemand eine Lösung?
Danke
Christian

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: RegEx
25.09.2019 21:09:00
Fennek
Hallo,
versuche es einmal mit diesem Code:

Sub F_en()
Dim DD As Object
Set DD = CreateObject("Scripting.Dictionary")
With CreateObject("vbscript.regexp")
.Global = True
.IgnoreCase = True
.MultiLine = False
.Pattern = "(\W+)"
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
Set RR = .Execute(Cells(i, 1))
For r = 0 To RR.Count - 1
For l = 1 To Len(RR(r))
DD.Item(Mid(RR(r), l, 1)) = vbNullString
Next l
Next r
Next i
End With
Debug.Print Join(DD.keys, " ")
Set DD = Nothing
End Sub
mfg
AW: RegEx
26.09.2019 08:06:36
Christian
Hallo Fennek,
und wo sehe ich das Ergebnis?
Christian
Anzeige
Im Direktfenster des VBA-Editors
26.09.2019 08:10:40
Daniel
Dieses musst du dir ggf noch über das Menü einblenden.
Dort wird alles angezeigt, was mit Debug.Prinz ausgegeben wird.
Gruß Daniel
AW: RegEx
26.09.2019 08:25:49
Christian
Hallo Fennek,
ok, das wusste ich noch nicht. Danke
Es wundert mich allerdings, warum S und c darin auftauchen.
Gruß
Christian
AW: Beispiel mit Problemfällen
26.09.2019 09:42:37
Fennek
Hallo,
in RegEx bedeuten "\W" alles ausser [0-9][A-z]. Sofern die genannten Buchstaben normales Ascii sind, dürfen sie nicht in der Liste auftauchen. Es wird aber nicht auf Unicode geprüft.
mfg
AW: Beispiel mit Problemfällen
26.09.2019 09:51:00
Nepumuk
Hallo Fennek,
\W beinhaltet auch den _
Gruß
Nepumuk
AW: RegEx
26.09.2019 09:47:56
Nepumuk
Hallo Christian,
teste mal so:
Option Explicit
Public Sub Pruefen()
Dim objDictionary As Object
Dim objRegex As Object, objMatch As Object
Dim avntValues As Variant
Dim ialngeIndex As Long, lngIndex1 As Long, lngIndex2 As Long
avntValues = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Value
Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
Set objRegex = CreateObject(Class:="VBScript.RegExp")
With objRegex
.Global = True
.IgnoreCase = True
.MultiLine = False
.Pattern = "([^a-z0-9 /.-])"
For ialngeIndex = LBound(avntValues, 1) To UBound(avntValues, 1)
Set objMatch = .Execute(avntValues(ialngeIndex, 1))
For lngIndex1 = 0 To objMatch.Count - 1
For lngIndex2 = 1 To Len(objMatch.Item(lngIndex1))
objDictionary.Item(Key:=Mid$( _
objMatch.Item(lngIndex1), lngIndex2, 1)) = vbNullString
Next
Next
Next
End With
Debug.Print Join(objDictionary.Keys, " ")
Set objDictionary = Nothing
Set objRegex = Nothing
Set objMatch = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: Sonderzeichen auflisten
26.09.2019 09:39:21
Daniel
HI
wenn man mal vom Standardzeichensatz ausgeht, also die ASCII-Codes von 1-255 ohne Unicodes, dann mit einfachem Excel so:
1. schreibe in C1 die 1 und in C2 die 2. Markiere die beiden Zellen und ziehe bis 255 runter
2. schreibe in D1 die Formel =Zeichen(C1) und ziehe die Formel nach unten
in C steht der ASCII-Code und in D das dazugehörige Zeichen
3. lösche in C:D alle Zellen, die für dich keine Sonderzeichen sind.
4. schreibe in D1 folgende Formel und ziehe sie nach unten:
=Wenn(Istfehler(Vergleich("*~"&Zeichen(C1)&"*";A:A;0));"---";"vorhanden")
das sollte dir vorhandenen Sonderzeichen markieren.
Gruß Daniel
Anzeige
AW: Sonderzeichen auflisten
26.09.2019 09:55:33
Christian
Hallo, darum geht es ja gerade, her geht es um Namen aus aller Herren Länder, das kann ich eben nicht garantieren, dass es nur ASCII 8 Zeichen sind.
So Dinge wie É È oder dieses noreuropiäische Ö das wie ein Durchmesserzeichen aussieht, sind auf jeden Fall dabei.
Daher wäre meine Idee gewesen, einfach alle Zeichen die vorkommen aufzulisten und dann die zuvor genannten wieder zu löschen. Auch wenn das sicherlich etwas länger dauert, ich hab Zeit.
Gruß
Christian
D
Nachtrag
26.09.2019 09:57:45
Christian
so ganz abgefahrene Sachen wie kyrillische, chinesische, japanische, oder koreanische Schriftzeichen sind nicht dabei
Anzeige
AW: Nachtrag
26.09.2019 11:32:54
Sigi
Hallo Christian,
ich hätte eine Funktion mit der du für jede Zelle die Sonderzeichen extrahieren kannst. Vielleich reicht dir das ja.
Function SonZeichExtrahieren(Zelle As Range) As String
Dim LoeschZeichen As String
Dim Txt As String
Dim i As Long
Application.Volatile
'Zeichen, die geloescht werden:
LoeschZeichen = "abcdefghijklmnopqrstuvwxyz" & _
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" & _
"0123456789" & _
",. -"   'Spezialzeichen!
Txt = Zelle.Text
For i = 1 To Len(LoeschZeichen)
Txt = Replace(Txt, Mid(LoeschZeichen, i, 1), "")
Next i
SonZeichExtrahieren = Txt
End Function
Gruß
Sigi
Anzeige
AW: Sonderzeichen auflisten
26.09.2019 11:52:18
Daniel
HI
wenn du den Verdacht hast, dass auch Zeichen aus dem 16-bit-Unicode-Zeichensatz verwendet werden könnten, dann verwende UNIZEICHEN() anstatt ZEICHEN() und ziehe die Formeln entsprechend weiter nach unten.
UNIZEICHEN und UNICODE für den erweiterten Zeichensatz gibt's seit Excel 2013.
Gruß Daniel
Noch ein Lösungsansatz
26.09.2019 12:25:33
mmat

Option Explicit
Type char
z As String
c As Long
End Type
Dim chars() As char, charcnt As Long
Sub AddChar(s As String)
Dim n As Long
For n = 1 To charcnt
If chars(n).z = s Then chars(n).c = chars(n).c + 1: Exit Sub
Next
charcnt = charcnt + 1: ReDim Preserve chars(charcnt)
chars(charcnt).z = s
chars(n).c = 1
End Sub
Sub ZeichenZählen()
Const erlaubt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz .-"
Dim r As Range, c As Range, s As String, i As Long
Set r = [A1:A23]
charcnt = 0
For Each c In r
s = c.Text
For i = 1 To Len(s)
If InStr(erlaubt, Mid(s, i, 1)) = 0 Then AddChar Mid(s, i, 1)
Next: Next
Worksheets.Add
For i = 1 To charcnt
Cells(i, 1) = chars(i).z
Cells(i, 2) = chars(i).c
Next
End Sub

Anzeige
AW: Sonderzeichen auflisten
26.09.2019 13:07:18
Daniel
HI
und noch ne VBA-Variante, um die Sonderzeichen zu ermitteln.
Ausgabe erfolgt in Zelle C1.
die nicht zu listenden "Normalen" Zeichen sind in der LIKE-Funktion aufgeführt.
dort kannst du bei Bedarf weitere eränzen:
Sub Sonderzeichen()
Dim i As Long
Dim txt, T As String
Dim Erg As String
For Each txt In ActiveSheet.UsedRange.Columns(1).Value
For i = 1 To Len(txt)
T = Mid(txt, i, 1)
If T Like "[A-Za-z0-9.- ]" Then
Else
If InStr(Erg, T) = 0 Then Erg = Erg & T
End If
Next
Next
Cells(1, "C") = Erg
End Sub
gruß Daniel
Alternativen?
27.09.2019 03:54:51
Luc:-?
Evtl kommt es auch darauf an, Christian,
wofür du das benötigst. Aber im Prinzip ist es bei deiner Vorgabe ja auch egal aus welchem Alfabet die Zeichen stammen, sie müssen nur in Standard-Unicode enthalten sein. Allerdings könnte es zu einem Problem kommen, wenn normale Buchstaben mit einem kombinierenden diakritischen Unicode-Zeichen ergänzt wdn, anstatt das evtl vorhan­dene komplette Zeichen zu benutzen. Dann wird nur das kombinierte Zeichen ausgegeben. Bei entsprd Abstand wie in Nepumuks Vorschlag* macht das nichts aus, fehlt der Abstand aber ganz, kombiniert sich das Zeichen bei Ausgabe mit dem davorstehenden, was zu Irrtümern führen kann. Aus dem Text øné würde so ǿ (Unicodes 248 & 769) werden, das es auch komplett gibt → ǿ (Unicode 511). Vorhanden ist aber nur ø und dafür aber e und   ́ (Unicode 769), das nicht mit é identisch ist (obwohl es mitunter umgewandelt wird).
Man könnte natürlich auf der Basis von Sigis UDF, kombiniert mit anderen UDFs und Xl-Stdd-Fktt, auch etwas Weitergehendes machen, aber dazu müssten die unnötigen Einschränkungen dieser UDF aufgehoben wdn:
• Argument Zelle As Range durch ZText As Variant oder As String ersetzen;
• folglich auch Txt durch ZText ersetzen und die Zuweisung entfallen lassen;
• evtl auch 2.Argument für die zu löschenden Zeichen angeben, um es flexibler zu machen;
• ggf auch Fktsergebnis As String entfallen lassen für evtl differenzierte F-Wert-Ausgabe.
Natürlich kannst du so etwas auch auf RegEx- oder Like-Operand-Basis machen und das auch auf die Zusammenfassung ganzer Bereiche umbauen. Für den korrigierten UDF-Stand könnte aber schon eine TextVerkettung der relevanten Zellen als 1.UDF-Argument reichen, wenn das nicht pro Zelle, sondern für alle Texte zusammen gemacht wdn soll. Darauf basiert ja auch Nepumuks Vorschlag.
Ansonsten gibt's im Archiv auch universellere UDFs, die auch für andere, ähnliche Aufgaben eingesetzt wdn können.
* Dieses Pgm unterschlägt aber /, was ja evtl irrelevant ist. Das hängt eben davon ab, was du damit vorhast. Ziffern hattest du ja auch nicht erwähnt, scheinen aber alle Lösungen wegzulassen.
Morhn, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige