Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mit RegEx letzte Ziffer entfernen

Mit RegEx letzte Ziffer entfernen
15.10.2014 18:27:53
Golem
Hallo Excel-Fachleute!
Ich habe drei Zeichenketten: "BEWKOSTEN050003390", "SVWZWOHNUNGNR.50007011" und
"WOHNUNGNR.40BAHNHOFSTR.13.
Mit dem Regex "(BEWKOSTEN|EREF|ZV|SVWZ|WOHNUNGNR.|BAHNHOFSTR.13)" und "[\d]{6}"
erhalte ich folgen Zahlen: "390", "11" und "40".
Als Ergebnis möchte ich die Zahlen "39", "11" und "40" erhalten.
Wie kann ich von der Zahl "390" die Ziffer "0" entfernen, ohne bei der Zahl "40" auch die
Ziffer "0" zu entfernen?
Für evtl. Tipps oder Anregungen schon mal besten Dank!
Werner

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit RegEx letzte Ziffer entfernen
15.10.2014 23:15:35
ransi
HAllo
Zeigst du uns mal den kompletten Code ?
ransi

=Left(Zahl, 2)*1 owT
16.10.2014 14:08:04
Rudi
.

AW: =Left(Zahl, 2)*1 owT
16.10.2014 15:35:48
Golem
Hallo Rudi,
einen schönen Dank für Deinen Vorschlag,
ich habe eine Lösung für mein Problem gefunden, aber ein neues Problem hat sich aufgetan.
Damit bin ich momentan noch am Ausprobieren.
Dein Vorschlag ist eine Alternative. Aber mein Ehrgeiz möchte das Problem mit RegEx lösen.
Wenn Du Interesse an meinen Gesamtcode haben solltest, so warte bitte noch eine kurze Zeit.
Dann werde ich den Gesamtcode mit Lösungsbeschreibung mitteilen.
Ich bin sehr daran interessiert, dass Excel/VBA-Fachleute mir evtl. konstruktiv behilflich sein werden.
Schöne Grüße
Werner

Anzeige
AW: Mit RegEx letzte Ziffer entfernen
16.10.2014 15:28:59
Golem
Hallo Ransi,
einen schönen Dank für Deine Anfrage.
Ich habe eine Lösung für mein Problem gefunden, aber ein neues Problem hat sich aufgetan.
Damit bin ich momentan noch am Ausprobieren.
Wenn Du noch an meinen Gesamtcode Interesse hast, so warte bitte noch eine kurze Zeit.
Dann werde ich den Gesamtcode mit Lösungsbeschreibung mitteilen.
Ich bin sehr daran interessiert, dass Excel/VBA-Fachleute mir evtl. behilflich sein werden.
Schöne Grüße
Werner

Anzeige
AW: Mit RegEx letzte Ziffer entfernen
18.10.2014 12:01:15
Golem
Hallo Rudi und Ransi,
wie zugesagt, hier mein Ergebnis für "Mit RegEx letzte Ziffer entfernen".
Zur Erinnerung:
Ich habe drei Zeichenketten: "BEWKOSTEN050003390", "SVWZWOHNUNGNR.50007011" und
"WOHNUNGNR.40BAHNHOFSTR.13.
Mit dem Regex "(BEWKOSTEN|EREF|ZV|SVWZ|WOHNUNGNR.|BAHNHOFSTR.13)" und "[\d]{6}"
erhalte ich folgen Zahlen: "390", "11" und "40".
Als Ergebnis möchte ich die Zahlen "39", "11" und "40" erhalten.
Wie kann ich von der Zahl "390" die Ziffer "0" entfernen, ohne bei der Zahl "40" auch die
Ziffer "0" zu entfernen?
Ich habe es mit einer sogenannten "Wortgrenze" ( \b[0] ) gelöst. Mit dieser sogenannte Wortgrenze wird
geprüft, ob ein Wortende eine Ziffer "0" besitzt und wenn ja, dann wird diese Ziffer entfernt.
Aber in dem Text "HAUSGELD WOHN.NR.30" ist dadurch auch von der Zahl "30" die "0" entfernt worden.
Dies ist das nächste Problem gewesen.
Danach habe ich mit dem Vorschlag von Ransi einige Beispiele probiert ( =Left(Zahl, 2)*1 ),
die Regexe weiter angepasst und die Reihenfolge der einzelnen Regexe verändert und
jetzt funktioniert alles einwandfrei.
Was möchte ich erreichen!
Ich habe von einer Bank eine csv-Datei, in der vom Jahr 2013 alle Kontobewegungen eines Girokontos
angegeben werden ( ca. 1.000 Bewegungen ).
Aus der Spalte "Verwendungszweck" möchte ich von allen Einzahlungen die teilweise enthaltenen Wohnugs-Nummern auslesen.
Die Texte in den einzelnen Zellen sind recht unterschiedlich ( der Kreativität der Angabe des Verwendungszweckes sind
keine Grenzen gesetzt ).
Das ist ein Teilbereich der gesamten Auswertung und alles funktioniert einwandfrei.
Public Function Wohnungs_Nr_finden(ByVal Verwendungszweck As String) As String
Dim RegEx As Object
' Reguläre Ausdrücke (Regular Expressions, kurz RegExp) dienen zum Suchen und Ersetzen von  _
Textelementen.
' Hier, für das Entfernen bestimmter Namen aus einem String.
' Mit Hilfe der Replace Methode kann man eine Zeichenkette nach bestimmten Textmustern (Pattern) _
durchsuchen
' und die gefundenen Textstellen durch einen anderen Text ersetzen oder löschen.
Dim re1 As String
re1 = Range("RegEx1")
Dim re2 As String
re2 = Range("RegEx2")
Dim re3 As String
re3 = Range("RegEx3")
Dim re4 As String
re4 = Range("RegEx4")
Dim re5 As String
re5 = Range("RegEx5")
Dim re6 As String
re6 = Range("RegEx6")
Dim re7 As String
re7 = Range("RegEx7")
Dim re8 As String
re8 = Range("RegEx8")
Dim re9 As String
re9 = Range("RegEx9")
Dim re10 As String
re10 = Range("RegEx10")
Dim re11 As String
re11 = Range("RegEx11")
Dim re12 As String
re12 = Range("RegEx12")
Dim re13 As String
re13 = Range("RegEx13")
Dim re14 As String
re14 = Range("RegEx14")
Dim re15 As String
re15 = Range("RegEx15")
Dim re16 As String
re16 = Range("RegEx16")
Dim re17 As String
re17 = Range("RegEx17")
Dies ist mein Code:
Set RegEx = CreateObject("Vbscript.Regexp")
With RegEx
.Global = True            ' Soll nur die erste Fundstelle (Standard, False), oder  _
alle Fundstellen (True) zurückgegeben werden?.....
.IgnoreCase = True        ' Legt fest, ob Groß- oder Kleinschreibung beachtet werden  _
soll.....
'.MultiLine = False       ' Wird diese Eigenschaft auf True gesetzt, so wird in der  _
Textbox Text mehrzeilig dargestellt.....
' Pattern-Zuweisung (engl. Modell, Muster) zum RegExp Objekt. Dieser Schritt definiert das " _
Wortmuster" nach dem in einer Zeichenkette gesucht werden kann.
.Pattern = re1
Wohnungs_Nr_finden = .Replace(Replace(Replace(Replace(Replace(Replace(Replace( _
Verwendungszweck _
, " ", ""), "-", ""), "/", ""), ",", ""), "&", ""), "+", ""), "" _
)
.Pattern = re2
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re3
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re4
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re5
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re6
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re7
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re8
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re9
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re10
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re11
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re12
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re13
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re14
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re15
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re16
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
.Pattern = re17
Wohnungs_Nr_finden = .Replace(Wohnungs_Nr_finden, "")
End With
Set RegEx = Nothing
If Wohnungs_Nr_finden = "390" Then
Wohnungs_Nr_finden = Left(Wohnungs_Nr_finden, 2)
Else
If Wohnungs_Nr_finden = "" Then
Wohnungs_Nr_finden = 0
End If
End If
End Function
Und das sind die einzelnen RegExe:
(Jan|Febr|Ma|Apr|Ju)\.?(\D?){1,3}[\d?]{1,4}
'Jan(.), Januar, Febr(.), Februar, Maerz, Mai, Apr(.), April, Jun(.), Juni, Jul(.), Juli, 1 bis 99
(Aug|Sept|Okt|Nov|Dez)\.?(\D?){4,5}[\d?]{1,4}
'Aug(.), August, Sept(.), September, Okt(.), Oktober, Nov(.), November, Dez(.), Dezember, 1 bis 99
(((0?[1-9]|[12][0-9])\.(0?[1-9]|1[0-2])\.)|(30\.((0?[13-9])|(1[0-2]))\.)|(31\.(0?[13578]|1[02])\.))(\d{2}|20\d{2})
'Beispiel: (0)2.08.13 oder 28.11.2099
(20\d{2})
'Beispiel: 2010 bis 2099
(Bahnhofstr\.?\d[1-3]?)
'Bahnhofst. 7 oder 9 usw. bis 7-13
((Bew)|(Kosten)|(Haus[\d]?)|(Geld))
'Bew, Kosten, Haus (1 bis 4), Geld
((Whn)|(Wohn|ungs?)|(Geld)|(N(\D?){4}r)|[\.?])
'Whn, Wohn, Geld, Wohnung(s), Wohnung(s)nummer
(Nachzahl[\.?](\D{3})?)
'Nachzahl(.), Nachzahlung
(EREF(ZV)?[\d]{12,22}|SVWZ)
([0]?5[0]{3}[1]?[7]?[9]?[1-4]?[0]?)
'Beispiel: 050003390
[A-Z](\.?){1,4}
Siebzehn Zellen habe ich für RegExe vorgesehen, davon sind elf belegt.
Schöne Grüße an Euch und schönen Dank für Eure Bemühungen!
Werner
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Mit RegEx die letzte Ziffer in Excel entfernen


Schritt-für-Schritt-Anleitung

Um mit RegEx die letzte Ziffer in Excel zu entfernen, kannst Du folgenden VBA-Code verwenden. Dieser Code sucht nach bestimmten Mustern und entfernt die letzte Ziffer, wenn sie den festgelegten Bedingungen entspricht.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Public Function Wohnungs_Nr_finden(ByVal Verwendungszweck As String) As String
    Dim RegEx As Object
    Set RegEx = CreateObject("Vbscript.Regexp")
    With RegEx
        .Global = True
        .IgnoreCase = True
        .Pattern = "(\d+)(?=0\b)"
        Wohnungs_Nr_finden = .Replace(Verwendungszweck, "$1")
    End With
    Set RegEx = Nothing
End Function
  1. Du kannst nun die Funktion Wohnungs_Nr_finden in Deinen Excel-Zellen verwenden, um die letzte Ziffer zu entfernen. Gib die gewünschte Zeichenkette an, und die Funktion gibt das Ergebnis zurück.

Häufige Fehler und Lösungen

  • Fehler: Die letzte Ziffer wird nicht entfernt.

    • Lösung: Stelle sicher, dass Du das richtige Muster im Regex definiert hast. In diesem Beispiel wird nach einer Ziffer gesucht, die vor einer "0" steht.
  • Fehler: Der Code funktioniert nicht.

    • Lösung: Überprüfe, ob Du die richtigen Berechtigungen zum Ausführen von VBA-Code in Excel hast. Aktiviere gegebenenfalls Makros in den Excel-Optionen.

Alternative Methoden

Wenn Du die letzte Ziffer ohne VBA entfernen möchtest, kannst Du auch die Excel-Funktion LINKS verwenden. Hier ist ein Beispiel:

=LINKS(A1; LÄNGE(A1)-1)

Diese Formel entfernt das letzte Zeichen der Zeichenkette in Zelle A1. Beachte, dass dies nicht speziell für Ziffern ist, sondern alle Zeichen entfernt.


Praktische Beispiele

Hier sind einige Beispiele, wie Du die Funktion Wohnungs_Nr_finden in Excel verwenden kannst:

  • Beispiel 1:

    • Eingang: BEWKOSTEN050003390
    • Ausgang: BEWKOSTEN05000339
  • Beispiel 2:

    • Eingang: SVWZWOHNUNGNR.50007011
    • Ausgang: SVWZWOHNUNGNR.5000701
  • Beispiel 3:

    • Eingang: WOHNUNGNR.40BAHNHOFSTR.13
    • Ausgang: WOHNUNGNR.40BAHNHOFSTR.1

Diese Beispiele zeigen, wie die Funktion Wohnungs_Nr_finden effektiv eingesetzt werden kann, um die letzte Ziffer zu entfernen.


Tipps für Profis

  • Regex optimieren: Du kannst die Regex-Ausdrücke anpassen, um spezifischere Anforderungen zu erfüllen. Experimentiere mit verschiedenen Mustern für Deine Anwendungsfälle.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen in Deinen VBA-Code ein, um unerwartete Eingaben zu berücksichtigen.
  • Dokumentation: Dokumentiere Deine Regex-Muster, damit Du sie später leicht wiederfinden und anpassen kannst.

FAQ: Häufige Fragen

1. Was ist RegEx? RegEx steht für reguläre Ausdrücke, ein leistungsfähiges Werkzeug zum Suchen und Manipulieren von Text in Excel und anderen Programmen.

2. Wie kann ich die letzte Ziffer in einer Zahl entfernen? Du kannst die Funktion Wohnungs_Nr_finden verwenden, um die letzte Ziffer in einem Text zu entfernen, der eine Zahl enthält.

3. Ist diese Methode in allen Excel-Versionen anwendbar? Ja, der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren, die die Verwendung von Makros unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige