Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1188to1192
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

Frage zu regexp

Frage zu regexp
chris
Hallo und guten morgen,
kann mir jemand helfen ?
Ich habe hier 2 mal einen Code.
Bei beiden Codes steht, das erlaubte Zeichen auch Zahlen zwischen 0-9 sind.
Aber als Ergebniss bekomme ich bei beiden Variablen andere Ergebnisse.?
Der Unterschied ist aber nur das Zeichen (^) soweit ich sehe.
Bei cb1 werden die Zahlen entfernt und bei cb2 bleiben Nur die Zahlen stehen ?
Warum das ?
Und dann noch eine kleine frage:
Bei mir am PC geht die Funktion replace bei einem Kumpel nicht.Es kommt ein Fehler.
Er hat aber auch Excel 2003 ?
  • Sub test()
    Set RegEx = CreateObject("Vbscript.regexp")
    cb1 = "ola   sdfj98knh!"
    With RegEx
    .IgnoreCase = True
    .Pattern = "[.0-9]" 'erlaubte Zeichen
    .Global = True
    cb1 = .Replace(cb1, "")
    End With
    Set RegEx = CreateObject("Vbscript.regexp")
    cb2 = "ola   sdfj98knh!"
    With RegEx
    .IgnoreCase = True
    .Pattern = "[^.0-9]" 'erlaubte Zeichen
    .Global = True
    cb2 = .Replace(cb2, "")
    End With
    End Sub
    


  • Und noch eine kleine frage:
    Zwischen den With Anweisungen kann ich ja Befehle mit dem . ansprechen.
    Also .Pattern oder .Replcace
    Bei manchen Befehlen das habe ich gerade getestet kommt auch eine Auswahl an möglichen Befehlen.
    Bei dem With RegEx nicht.Kann ich das auch irgendwie erreichen ?
    Auch bei diesen beiden ist es mir beim Testen aufgefallen.
    Beide sind ja von Excel Unterstützte funktionen:
    With Worksheets("Tabelle1").Range("A1")
    End With
    With Cells
    End With
    Bei dem unteren With Cells kommt eine Hilfe bei der Eingabe .
    Bei With Worksheets("Tabelle1").Range("A1") nicht ?
    Vielen Dank für eure Hilfe.
    ich hoffe ich kann auch irgendwann mal sagen ich bin sehr gut in VBA.
    Und ich hoffr meine frage ist Lesbar.
    Danke
    Weil ^ in regExp der Ausschlussoperator ist (owT)
    03.12.2010 11:29:02
    Renee

    AW: Frage zu regexp
    03.12.2010 11:37:54
    Harald
    Hallo Chris,
    "^" hat zwei Funktionen. Aus der VBScript Hilfe:
    1) "^" alleine: Entspricht der Position am Anfang der Eingabezeichenfolge. Wenn die Multiline-Eigenschaft des RegExp-Objekts festgelegt ist, entspricht ^ auch der Position nach "\n" oder "\r".
    2) "[^xyz]": Eine Komplementmenge von Zeichen. Entspricht allen nicht enthaltenen Zeichen. Beispielsweise entspricht '[^abc]' dem "f" in "fallen".
    Also sucht .Pattern = "[.0-9]" nach den Ziffern und ersetzt diese durch "", also ergibt days einen String ohne Ziffern. .Pattern = "[^.0-9]" sucht nach allen Nicht-Zifern und ersetzt diese durch "", also bleibt übrig ein String nur mit Ziffern.
    Zur zweiten Frage: Das ist m.E. kein Excel Problem, denn die Regexp sind nicht Bestandteil von Excel, sondern von VBScript ,daher auch die Anweisung Set RegEx = CreateObject("Vbscript.regexp").
    Bei Deinem Freund ist womöglich VBScript nicht installiert? Guck mal hier:
    http://www.microsoft.com/downloads/details.aspx?familyid=E74494D3-C4E1-4E18-9C6C-0EA28C9A5D9D&displaylang=de
    Zur letzteren Frage: Das kommt darauf an, ob es zu dem "WIith" Object noch weitere Eigenschaften gibt (mit "." getrennt).
    With ist nur eine vereinfachte Schreibweise. Statt
    Worksheets("Tabelle1").Range("A1").Eigenschaft1 = blabla
    Worksheets("Tabelle1").Range("A1").Eigenschaft2 = blabla
    Worksheets("Tabelle1").Range("A1").Eigenschaft3 = blabla
    schreibt man vereinfacht:
    With Worksheets("Tabelle1").Range("A1")
    .Eigenschaft1 = blabla
    .Eigenschaft2 = blabla
    .Eigenschaft3 = blabla
    End With
    Das geht aber nur, wenn VBA erkennen kann, um welches Objekt es sich in der With Anweisung handelt und welche konkreten Eigenschaften dieses Objekt hat.
    Worksheets("Tabelle1").Range("A1") ist ein konkreter Bereich auf einem konkreten Arbeitsblatt, also sollte VBA dazu Eigenschaften finden.
    "Cells" ist zu allgemein (welche Zellen?), daher findet VBA keine Eigenschaften. Wenn Du stattdessen konkret z.B. Cells(1,1) angibst, sollte sich das ändern.
    Bei Regex kann ich nur vermuten, dass VBA keine Eigenschaften kennt, weil es kein Excel Objekt ist, sondern extern (vbscript). Die ebenfalls bei Microsoft herunterladbare Hilfe zu VBScript gibt aber gute Erklärungen zu RegEx.
    Gruß
    Harald
    Anzeige
    Beim letzten Pkt hast du was verwechselt,...
    03.12.2010 12:07:28
    Luc:-?
    …Harald,
    Chris hat das Problem genau andersherum geschildert und das ist auch richtig so, denn nicht Cells ist zu allgemein, da würden immer mögl Eigenschaften angezeigt wdn, sondern Range ist zu speziell, d.h. nicht As Range deklariert, was so ja auch nicht ginge. Wenn hier ebenfalls der Intellisense des VBE genutzt wdn soll, muss eine extra Range-Variable deklariert wdn, die dann mit dem Ausdruck belegt wird (Set xyz = Worksheet…). Dann wdn zu xyz auch Eigenschaften angezeigt. Man muss sich also jeweils entscheiden, ob With oder Set günstiger wäre…
    He, Chris,
    laut Nepumuk hast du schon 8 Jahre Zeit gehabt, dir deinen Wunsch zu erfüllen… :->
    Grüße+schöWE, Luc :-?
    Anzeige
    AW: Beim letzten Pkt hast du was verwechselt,...
    03.12.2010 13:20:04
    chris
    Hallo Luc,
    vielen dank auch für Deine Antwort.
    leider habe ich Probleme mit dem VBA lernen.
    Nepumuk weiß mittlerweilen warum.
    Aber ich tue mein bestes.
    Danke auch für die anderen 2 Antworten, Renee und Harald !
    Danke für die Korrektur
    03.12.2010 13:27:57
    Harald
    AW: Danke für die Korrektur
    03.12.2010 13:36:04
    chris
    Luc ich muss noch einmal :(
    Ich weiß ein andere versteht das villeicht.
    ich leider nicht.
    Ich verstehe nicht ganz was Du schreibst.
    das mit dem Set oder With
    habe jetzt mal das umgesezt was du glaube ich geschrieben hast.
    und siehe da es klappt.
    Aber warum das verstehe ich nicht ganz.
    Sub t()
    Dim cb As Range
    Set cb = Range("A1")
    With cb
    End With
    End Sub
    

    Anzeige
    ...Weil du cb direkt als Range deklariert hast,...
    03.12.2010 16:33:52
    Luc:-?
    …Chris,
    dann muss der Intellisense auch darauf eingehen und kann sich nicht drücken… ;-)
    Allerdings hättest du für die 2 Buchstaben ja nun keine With-Konstruktion gebraucht — das war mit Set oder With gemeint. Es geht natürl auch so…
    Gruß Luc :-?
    Tut mir leid, aber so ist's mitunter... owT
    03.12.2010 16:39:21
    Luc:-?
    :-?
    AW: Frage zu regexp
    03.12.2010 13:31:48
    chris
    Hallo Harald,
    vielen Dank für Deine Antwort.
    Aber ich glaube das ist zu hoch für mich :((((
    "1) "^" alleine: Entspricht der Position am Anfang der Eingabezeichenfolge. Wenn die Multiline-Eigenschaft "des RegExp-Objekts festgelegt ist, entspricht ^ auch der Position nach "\n" oder "\r".
    -------- Verstehe ich gar nicht.
    Du schreibst ich kann es hier runterladen denke ich.
    Bei Deinem Freund ist womöglich VBScript nicht installiert? Guck mal hier:
    Aber kann es sein das es auf dem PC schon drauf ist bei ihm nur aktiviert werden muss wie ein Verweis unter Extras?
    Wenn ja könntest Du mir vielleicht sagen wie oder wo ?
    danke
    Anzeige
    AW: Frage zu regexp
    03.12.2010 13:43:39
    Harald
    Hallo Chris,
    ob und wie man ein installiertes VBScript aktivieren kann weiß ich nicht. Selbst wenn es schon installiert sein sollte, dann schadet neu herunterladen und installieren sicher nicht. Runterladen kannst Du es direkt von Microsoft unter der von mir angegebenen Adresse.
    Noch mal mit meinen Worten die Erklärung aus der Hilfe neu ausgelegt:
    1) Wenn "^" alleine steht, dann bedeutet es den Zeilenanfang. Bei einem einfachen String ist das der "Anfang der Eingabezeichenfolge" aus der Hilfe. Bei einem mehrzeiligen Text (String mit Zeilenumbrüchen) ist "^" zunächst auch nur der Anfang des Textes (Strings). Wenn in dem RegEx Object, das Du mit Deinem Code ja erzeugt hast, aber die Multiline-Eigenschaft gesetzt ist, dann werden die Steuerzeichen \n (NewLine, deutsch Neue Zeile) und \r (Return, deutsch Wagenrücklauf) als Beginn einer neuen Zeile interpretiert und "^" bedeutet dann den Anfang dieser neuen Zeile. \n und \r sind Schreibweisen, die aus der klassischen Programmierung in der Sprache "C" stammen. Sie entsprechen in VBA den vordefinierten Konstanten \n=VbLF = Ascii-10 und \r=VbCr=Ascii-13.
    Besser verständlich?
    Harald
    Anzeige
    AW: Frage zu regexp
    03.12.2010 14:36:56
    chris
    Wowe super.
    danke Harald.
    Ich brauche meistens etwas länger und eine genauere Erklärung.
    Jetzt habe ich es glaube ich verstanden :)
    Hilfe zu regular Expressions
    03.12.2010 13:50:35
    Harald
    Hallo Chris,
    hier noch ein nützlicher Link zum Thema reguläre Ausdrücke (regEx):
    http://www.weitz.de/regex-coach/
    Gruß
    Harald Kapp
    AW: Hilfe zu regular Expressions
    03.12.2010 14:50:59
    chris
    ohh Danke

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige