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

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

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.

bei excel zellen zuweisen/definieren

Hallo,

wie kann ich bei excel (2010) diverse Zellen Werte zuweisen. z.B

In Zelle 1:A steht der Buchstabe a und in Zelle 1:B steht 5. In einer Formel will ich jetzt schreiben a^22 und für a soll halt automatisch die dann 5 genommen werden.

Vielen Dank im Voraus.

MfG felipe

...zur Frage

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 Krank- und Urlaubs-Stunden rechnen mit SUMMEWENN()?

Hallo zusammen. Ich habe bei Excel ein Kalender, indem ich die Arbeitsstunden für Mitarbeiter eintrage. Ein Tag hat vier Zellen, indem in der ersten der Name eingegeben wird. In der zweiten und dritten Zelle wird die Arbeitszeit eingetragen(Von-Bis). In der vierten Zelle kann falls nötig mit einem Dropdownfeld der Buchstabe K (für Krank) oder U(für Urlaub) ausgewählt werden. In einem neuen Tap sind alle Mitarbeiter aufgelistet mit den jeweiligen Stunden. Daneben die Stunden für Krank und daneben die Urlaubsstunden. Wie kann ich sobald ich das K oder U an dem Tag ausgewählt habe, die Stunden zusätzlich neben den normalen Stunden auch in die jeweilige Urlaubs oder Krank-Zelle addieren? Vielleicht mit SUMMEWENN()? Habe es probiert, habe die Formel aber auch nicht genau verstanden.

...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

Excel Makro - Variable Zelleneingabe im Blatt suchen?

Hallo, ich suche seit gut 8 Monaten (ja.. eine lange Zeit bis dato ohne Lösung) einen Weg um folgendes Umzusetzen:

Makro-Ausführung:

In eine Zelle soll ein Buchstabe eingegeben werden, diese Zelle soll vom Makro kopiert werden, den Textinhalt in die Suche eingefügt werden, das Blatt nach dem Text durchsuchen und die Zelle bei einer Liste finden, mit den Pfeiltasten einmal auf die Zelle rechts davon springen, diesen Text kopieren und in eine andere Zelle einfügen.

Makro-Aufnahme:

Zum aufnehmen des Makros gebe ich vor der Aufnahme in die gewisse Zelle (siehe Bild unten) einen Buchstaben (B) ein. Dann starte ich das Makro.

Die Zelle mit dem Buchstaben "B" wird kopiert, die normale Excel-Suche wird geöffnet, der Textinhalt wird bei der Suche eingefügt, Suche gestartet. Buchstabe "B" wird im aktuellen Blatt (Liste) gefunden. Ich springe mit der Pfeiltaste rechts in die benachbarte Zelle ("Baum") kopiere die Zelle und füge sie wo anders als "Ausgabe" ein. Ich beende die Aufnahme.

Problem:

Wenn ich dann in die gewisse Zelle den Buchstaben "A" eingebe, und aus "Ausführen" klicke, wird das vorherige aufgezeichnete Makro gestartet. Dann soll in der Suche der Buchstabe A eingefügt werden und nach "A" gesucht werden.

Aufgrund eines eigenartigen Fehlers wird aber der WIRKLICHE BUCHSTABE VON DER MARKO-AUFZEICHNUNG ("B") EINGEFÜGT - UND NICHT A.

(Ich habe beim Aufzeichnung natürlich über die Einfüg-Funktion den Zellinhalt ("B") eingefügt und nicht manuell eingetippt.)

Ich muss es schaffen, dass die Suche immer einen anderen Buchstaben einfügt, welcher von der Zelle kopiert wurde.

Wenn möglich, nur Methoden zur Aufzeichnung angeben, keine VBA Befehle - da ich davon nichts verstehe :P Ausser es ist wirklich anders nicht umsetzbar.

Bitte um dringende Hilfe, mit läuft die Zeit davon :p Ich hab das sicher schon 25 Mal neu gemacht, immer etwas anders und andere Methoden gesucht, ich werden nicht fündig.

Hier ein Bild darunter, für besseres Verständis. Ich freue mich über jede Hilfe!

Danke Danke Danke!

Bild in groß öffnen

...zur Frage

Excel-Problem: In einer Tabellenzelle entweder Eingabe oder Berechnung

Ich habe in einer Tabelle zur Umrechnung von Daten 2 Zellen, in denen ich eine Eingabe machen kann. Gebe ich in die Zelle 1 den Kilogramm-Wert ein, soll in der Zelle 2 das Ergebnis einer Umrechnung in Gramm erscheinen.

Gebe ich in die Zelle 2 einen Wert in Gramm ein, soll in der Zelle 1 das Ergebnis einer Umrechnung in Kilogramm erscheinen. (die Berechnungen sind in der Original-Tabelle natürlich etwas komplizierter, als hier die Umrechnung von Kilogramm in Gramm.) Das heißt, ich möchte in einer Zelle, in der eine Formel zur Berechnung eines Wertes steht, eine Eingabe machen. können, ohne dabei die Formel zu überschreiben, da sonst die nächste Eingabe nicht mehr funktioniert. Das Problematische dabei: Alles ohne Makros/VBA

...zur Frage

Was möchtest Du wissen?