Dateneingabeformat in Excel definieren?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Mit RegEx hat Excel Probleme. Kannst ja mal nach "Excel Regex" googeln.
Mein erster Fund:

https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops

Ich schau mal ob ich was für Dich zusammenstricken kann. Glaube aber eher nicht. Vielleicht hilft ja ein anderer Experte?

Ich habe jetzt mal einen Code zusammengestoppelt, der eigentlich klappen müsste. Er gehört in das Modul des Tabellenblattes:

Function istZahl(s As String) As Boolean
If IsNumeric(s) Then istZahl = True
End Function

Function istBuchstabe(s As String) As Boolean
If Asc(s) >= 65 And Asc(s) <= 90 Then
istBuchstabe = True
ElseIf Asc(s) >= 97 And Asc(s) <= 122 Then
istBuchstabe = True
End If
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A20")) Is Nothing Then
Dim s As String
Dim passt As Boolean
s = Target.Value
If Len(s) < 11 Or Len(s) > 12 Then
MsgBox "Eingabelänge falsch"
Target.ClearContents
Exit Sub
End If

If istBuchstabe(Mid(s, 1, 1)) _
And istBuchstabe(Mid(s, 2, 1)) _
And istZahl(Mid(s, 3, 1)) _
And istZahl(Mid(s, 4, 1)) _
And istZahl(Mid(s, 5, 1)) _
And (Mid(s, 6, 1)) = "/" _
And istZahl(Mid(s, 7, 1)) _
And istBuchstabe(Mid(s, 8, 1)) _
And istBuchstabe(Mid(s, 9, 1)) _
And (Mid(s, 10, 1)) = "_" _
And istBuchstabe(Mid(s, 11, 1)) _
Then passt = True

If Len(s) = 12 Then
If Not istBuchstabe(Mid(s, 12, 1)) Then _
passt = False
End If

If passt = False Then
MsgBox "Falsche Form"
Target.ClearContents
End If
End If
End Sub

Ist recht einfach gestrickt und lässt sich sicherlich optimieren und allgemeiner fassen, aber müsste eigentlich klappen. Teste mal ausführlich (Sicherheitskopie!).
Habe ich Dich richtig verstanden?

2
@Oubyi

P.S.: Umlaute sind bei obigem Code übrigens nicht erlaubt. Das lässt sich aber leicht erweitern, falls nötig.

1
@Oubyi

Wow super vielen dank!!!

Das einzige Problem was es noch gibt... wenn ich etwas falsch eintippe muss ich Excel via Taskmanager beenden, da ich die Fehlermeldung nicht mit Kopfdruck beenden kann (Excel 2010).

0
@syrena1992

ps.

Ich fürchte da habe ich nicht aufgepasst. Bin doch schon etwas aus der Übung.

Lösche mal die BEIDEN Zeilen
Target.ClearContents
aus dem Code.
Dann wird allerdings die Zelle nicht mehr geleert.
Oder Du nimmst diesen erweiterten Code:



Function istZahl(s As String) As Boolean
If IsNumeric(s) Then istZahl = True
End Function

Function istBuchstabe(s As String) As Boolean
If Asc(s) >= 65 And Asc(s) <= 90 Then
istBuchstabe = True
ElseIf Asc(s) >= 97 And Asc(s) <= 122 Then
istBuchstabe = True
End If
End Function


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A20")) Is Nothing Then
On Error GoTo ErrorHandler
Application.EnableEvents = False
Dim s As String
Dim passt As Boolean
s = Target.Value
If Len(s) < 11 Or Len(s) > 12 Then
MsgBox "Eingabelänge falsch"
Target.ClearContents
Exit Sub
End If

If istBuchstabe(Mid(s, 1, 1)) _
And istBuchstabe(Mid(s, 2, 1)) _
And istZahl(Mid(s, 3, 1)) _
And istZahl(Mid(s, 4, 1)) _
And istZahl(Mid(s, 5, 1)) _
And (Mid(s, 6, 1)) = "/" _
And istZahl(Mid(s, 7, 1)) _
And istBuchstabe(Mid(s, 8, 1)) _
And istBuchstabe(Mid(s, 9, 1)) _
And (Mid(s, 10, 1)) = "_" _
And istBuchstabe(Mid(s, 11, 1)) _
Then passt = True

If Len(s) = 12 Then
If Not istBuchstabe(Mid(s, 12, 1)) Then _
passt = False
End If

If passt = False Then
MsgBox "Falsche Form"
Target.ClearContents
End If
ErrorHandler: Application.EnableEvents = True
End If
End Sub


SORRY!
Ich hoffe jetzt klappt es besser.

0
@Oubyi

DH! habe an was ähliches gedacht, aber Du hast das schon perfekt ausgearbeitet!

lediglich die 3 Zeilen istzahl würde ich zu einer Zeile kürzen:

istZahl(Mid(s, 3, 3)

aber das sind Peanuts im Vegleich zur Gesamtarbeit!

1
@Iamiam

Stimmt das wäre effektiver.
Kleines Gegenargument: Der Code wäre nicht mehr so leicht auf andere Strukturen anzupassen.
Aber natürlich könnte man das Ganze auch noch allgemeiner aufbauen, sodass man zumindest eine primitive Regex mit Zahl,Buchstabe und Zeichen als String übergeben kann.
Vielleicht habe ich mal Langeweile 🙂

0
@Oubyi

Es gibt noch ein kleines Problem. Wenn ich nun etwas "falsches" in die Zelle eintrage kommt wie erhofft die Msgbox und die Zelle wird geleert. Wenn ich jetzt allerdings noch einmal etwas falsches eingebe bzw. in eine andere Zelle in dem Bereich etwas falsches eingebe, wird dies jedoch dann akzeptiert. Kannst du das noch fixen?

0
@syrena1992

Ja, kann ich.
War wohl nicht mein bester Tag als ich den Code geschrieben habe (:o |
Ich denke mal das genannte Problem tritt nur bei falscher Länge auf, nicht bei falscher Struktur.
Da muss noch eine Zeile geändert werden und zwar diese:


Function istZahl(s As String) As Boolean
If IsNumeric(s) Then istZahl = True
End Function

Function istBuchstabe(s As String) As Boolean
If Asc(s) >= 65 And Asc(s) <= 90 Then
istBuchstabe = True
ElseIf Asc(s) >= 97 And Asc(s) <= 122 Then
istBuchstabe = True
End If
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A20")) Is Nothing Then
On Error GoTo ErrorHandler
Application.EnableEvents = False
Dim s As String
Dim passt As Boolean
s = Target.Value
If Len(s) < 11 Or Len(s) > 12 Then
MsgBox "Eingabelänge falsch"
Target.ClearContents
GoTo ErrorHandler
End If

If istBuchstabe(Mid(s, 1, 1)) _
And istBuchstabe(Mid(s, 2, 1)) _
And istZahl(Mid(s, 3, 1)) _
And istZahl(Mid(s, 4, 1)) _
And istZahl(Mid(s, 5, 1)) _
And (Mid(s, 6, 1)) = "/" _
And istZahl(Mid(s, 7, 1)) _
And istBuchstabe(Mid(s, 8, 1)) _
And istBuchstabe(Mid(s, 9, 1)) _
And (Mid(s, 10, 1)) = "_" _
And istBuchstabe(Mid(s, 11, 1)) _
Then passt = True

If Len(s) = 12 Then
If Not istBuchstabe(Mid(s, 12, 1)) Then _
passt = False
End If

If passt = False Then
MsgBox "Falsche Form"
Target.ClearContents
End If
ErrorHandler: Application.EnableEvents = True
End If
End Sub

Also
GoTo ErrorHandler

statt
Exit Sub.

SORRY, ich hoffe ich habe nicht noch mehr Bugs in den Code gebaut.
Durch den Fehler reagierte VBA gar nicht mehr auf eine Änderung, da die "Events" ausgeschaltet blieben.
Falls Du die Datei nicht schon geschlossen hast, dann mach das bitte und öffne sie neu, bevor Du die Änderung vornimmst.
Alternativ kannst Du auch dieses kleine Programm anfügen:

Sub EventsAn()
Application.EnableEvents = True
End Sub

den Curser dort hinein setzen und F5 drücken (dadurch wird es ausgeführt).

0
@Oubyi

Danke fürs
Trotz der "Pannen" ☼

0

Das geht nicht ohne weiteres. Du könntest dir mittels VBA eine Bibliothek einbinden, die reguläre Ausdrücke unterstützt. Das wäre aber relativ viel Aufwand für relativ wenig Nutzen.

Hallo,

da Excel (leider) keine RegEx unterstützt, würde ich Dir empfehlen auf LibreOffice Calc umzusteigen.

Libre Office unterstützt die Regulären Ausdrücke.

(Kostenlos zum runter laden hier:)
https://de.libreoffice.org/download/libreoffice-still/

Diese könnten z.B. so aussehen:

[0-9a-zA-Z0-9]*.

Grüße,

iMPerFekTioN

Top! Da hat einer die Scheuklappen abgelegt.

0

Scheuklappen?😂

0
@iMPerFekTioN

meint wohl: xl und sonst nix

(Mein Problem: reguläre Ausdrücke sind mir als Dilettanten ein böhmisches Dorf, kenn ich nur vom Hörensagen, fürchte, dass es dem Frager nicht anders geht.)

0

Das ist kein Problem,
Die kann man erklären:)

0

EXCEL Immer eine Zelle weiterrutschen.

Hallo,

möchte in EXCEL eine Eingabe in Zelle A1 machen. Und er soll nach drücken der Entertaste von selbst diese Zahl in B1 fügen. Wenn ich das nächste Mal eine Eingabe in Zelle A1 mache, soll er diese Zahl in Zelle B2 einfügen und dannach die nächste in B3, usw.

Könnt ihr mir da weiterhelfen?!

Danke schon einmal im Vorraus...

...zur Frage

Excel: Zellwert in andere Zelle übertragen, dann löschen

Wie kann ich den Inhalt einer Zelle an eine andere Zelle Übertragen?

Genauer möchte ich in bspw. Zelle A5 einen Wert eintragen, der dann zum Wert in Zelle addiert wird. Dann soll der Wert in Zelle A5 gelöscht werden und für die nächste Eingabe bereitstehen.

Ist wahrscheinlich ein VBA Problem und da ich in dieser Materie noch nicht so tief drinstecke seid nun ihr gefragt. Bitte um Hilfe

...zur Frage

Wie kann ich bei Excel einzelne Zeilen bzw Spalten mit weiteren Tabellenblättern in der Datei synchron halten?

Liebe User dieser Internet Seite!

Ich habe eine Excel Datei geschrieben... Nun würde ich gerne mehrere Spalten bzw Zeilen bzw nur eine Zelle mit den weiteren Tabellenblättern in dieser Datei synchron halten!

Es ist eine Wochenliste (jede Woche neu), wo viele Namen sind und diese Namen würde ich gerne nicht immer neu einfügen müssen...

Könnt Ihr mir bitte helfen... Brauche es ziemlich dringend!

Danke im Voraus

Mit freundlichen Grüßen, Merlin

...zur Frage

Excel Zelle Färben wenn Buchstabe

Hallo Leute,

Ich möchte in Excel ein Makro was mir automatisch die Zelle färbt.Wenn T in Zelle dann soll diese Zelle Rot werden(und das T löschen)Wenn W in Zelle dann soll diese Zelle Blau werden(und das W löschen)

Ich hoffe ihr könnt mir helfen.Danke im Vorraus.

...zur Frage

Vor-und Nachteile von Datenbank zu Excel, Definition des Wortes Redundanzen?

Welche Vorteile und Nachteile gibt es von Datenbank zu Excel? Und was sind Redundanzen?

...zur Frage

Kann man Zellen in Excel für bestimmte nur für bestimmte Zeichen Frei geben?

Hi ich erstelle ein Tic Tac To Spiel In Excel, bin so weit auch schon fertig. Ich möchte nun aber gerne die Felder A1=C3 so Sperren das nur X oder O eingegeben werden kann.

Wenn Jemand noch eine Idee hat wie man, x und o abwesend frei geben kann wer dies auch hilfreich. mfg. blir14

...zur Frage

Was möchtest Du wissen?