Microsoft Excel

Herbers Excel/VBA-Archiv

Sonderzeichen auflisten


Betrifft: Sonderzeichen auflisten von: Christian
Geschrieben am: 25.09.2019 20:49:41

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

  

Betrifft: AW: RegEx von: Fennek
Geschrieben am: 25.09.2019 21:09:00

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


  

Betrifft: AW: RegEx von: Christian
Geschrieben am: 26.09.2019 08:06:36

Hallo Fennek,

und wo sehe ich das Ergebnis?

Christian


  

Betrifft: Im Direktfenster des VBA-Editors von: Daniel
Geschrieben am: 26.09.2019 08:10:40

Dieses musst du dir ggf noch über das Menü einblenden.
Dort wird alles angezeigt, was mit Debug.Prinz ausgegeben wird.

Gruß Daniel


  

Betrifft: AW: RegEx von: Christian
Geschrieben am: 26.09.2019 08:25:49

Hallo Fennek,

ok, das wusste ich noch nicht. Danke
Es wundert mich allerdings, warum S und c darin auftauchen.

Gruß
Christian


  

Betrifft: AW: Beispiel mit Problemfällen von: Fennek
Geschrieben am: 26.09.2019 09:42:37

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


  

Betrifft: AW: Beispiel mit Problemfällen von: Nepumuk
Geschrieben am: 26.09.2019 09:51:00

Hallo Fennek,

\W beinhaltet auch den _

Gruß
Nepumuk


  

Betrifft: AW: RegEx von: Nepumuk
Geschrieben am: 26.09.2019 09:47:56

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


  

Betrifft: AW: Sonderzeichen auflisten von: Daniel
Geschrieben am: 26.09.2019 09:39:21

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


  

Betrifft: AW: Sonderzeichen auflisten von: Christian
Geschrieben am: 26.09.2019 09:55:33

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


  

Betrifft: Nachtrag von: Christian
Geschrieben am: 26.09.2019 09:57:45

so ganz abgefahrene Sachen wie kyrillische, chinesische, japanische, oder koreanische Schriftzeichen sind nicht dabei


  

Betrifft: AW: Nachtrag von: Sigi
Geschrieben am: 26.09.2019 11:32:54

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


  

Betrifft: AW: Sonderzeichen auflisten von: Daniel
Geschrieben am: 26.09.2019 11:52:18

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


  

Betrifft: Noch ein Lösungsansatz von: mmat
Geschrieben am: 26.09.2019 12:25:33

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



  

Betrifft: AW: Sonderzeichen auflisten von: Daniel
Geschrieben am: 26.09.2019 13:07:18

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


  

Betrifft: Alternativen? von: Luc:-?
Geschrieben am: 27.09.2019 03:54:51

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 …



Beiträge aus dem Excel-Forum zum Thema "Sonderzeichen auflisten"