Formateingabe in eine Zelle erzwingen

1941
sid

Ich brauche meine Kalkulationstabelle, um Benutzern nur die Eingabe des Formats hh.mm/hh.mm für ihr Arbeitsmuster zu gestatten. Beispielsweise arbeitet jemand 12,5 Stunden in einer 37-Stunden-Woche als 12.50 / 37.00

2

1 Antwort auf die Frage

2
Horn OK Please

Erstellen Sie im VBA-Editor ein neues Modul in Ihrer Arbeitsmappe (Sie müssen es als .xlsoder .xlsmnicht speichern .xlsx) und fügen Sie den Code wie folgt ein:

Function RegEx(Pattern As String, TextToSearch As String) As String 'vv Dim RE As Object, REMatches As Object  Set RE = CreateObject("vbscript.regexp") With RE .MultiLine = False .Global = False .IgnoreCase = False .Pattern = Pattern End With  Set REMatches = RE.Execute(TextToSearch) If REMatches.Count > 0 Then RegEx = REMatches(0) Else RegEx = vbNullString End If End Function '^^  Public Function IsGood(stir As String) If RegEx("[0-9][0-9]\.[0-9][0-9]/[0-9][0-9]\.[0-9][0-9]", stir) = stir Then IsGood = "GOOD" Else IsGood = "BAD" End If End Function 

Die erste Funktion RegExführt einen regulären Ausdruck aus. Die zweite Funktion IsGoodgibt die Zeichenfolge zurück, GOODwenn die Ausgabezeichenfolge mit der Eingabezeichenfolge übereinstimmt (dh die gesamte Zeichenfolge stimmt genau mit dem regulären Ausdruck überein) BAD.

Schreiben Sie nun in einer Ersatzspalte irgendwo (es kann eine verborgene Spalte sein) in Ihrem Arbeitsblatt eine Formel wie:

=IsGood(A1) (Verwenden Sie Anker, wenn dies für mehrere Zeilen erforderlich ist.)

Gehen Sie dann auf der Multifunktionsleiste zu Daten -> Datenüberprüfung -> Datenüberprüfung ..., wobei die Zellen mit den zu testenden Daten im Arbeitsblatt ausgewählt sind .

Ändern Sie die Dropdown-Box "Zulassen:" in "Benutzerdefiniert" und in "Formel" beispielsweise um:

=B1="GOOD"

Ersetzen Sie "B1" durch den Verweis auf die erste Zelle, die Ihre =IsGoodFormel enthält - nicht die Zellen, die Ihre Eingabedaten enthalten.

Nun, um Ihre Ergebnisse zu testen:

  • Geben Sie etwas wie "Hallo" in eine Zelle ein, die der Datenüberprüfung unterzogen wird. Sie erhalten eine Fehlermeldung und dürfen die Bearbeitung nicht durchführen.
  • Geben Sie etwas wie "12.34 / 56.78" ein und es funktioniert wie in Excel normal.
  • Wenn Sie etwas wie "12.34,56.78" eingeben, wird der Fehler bei der Datenüberprüfung angezeigt, da das Komma nicht mit dem regulären Ausdruck übereinstimmt.

Sie können den Regex in meinem Code verbessern, um laxer zu sein, wenn Sie Werte wie "12" anstelle von "12.00" akzeptieren können. Dies hängt jedoch von Ihren genauen Anforderungen und Ihrer Fähigkeit ab, reguläre Ausdrücke zu verstehen.

Grundsätzlich [0-9][0-9]\.[0-9][0-9]/[0-9][0-9]\.[0-9][0-9]ist ein regulärer Ausdruck, der besagt "Entsprechung einer 2-stelligen Zahl gefolgt von einem Punkt, dann einer weiteren 2-stelligen Zahl, dann einem Schrägstrich vorwärts, dann einer weiteren 2-stelligen Zahl, dann einem Punkt, dann einer weiteren 2-stelligen Zahl". . Das ist ziemlich streng:

  • Alle Leerzeichen stimmen nicht überein
  • Wenn eine der Zahlen 0, 1 oder 3 oder mehr Ziffern enthält, kann sie nicht übereinstimmen. Zum Beispiel 12.375/37.00würde wegen der zusätzlichen Ziffer ausfallen, 5.
  • Die Verwendung eines umgekehrten Schrägstrichs \anstelle eines Schrägstrichs /würde nicht passen. Sie können das Alternation-Zeichen |im regulären Ausdruck verwenden, um anzuzeigen, dass eine der beiden Möglichkeiten zulässig ist. Auf diese Weise können Sie entweder einen Vorwärts- oder einen Rückwärts-Schrägstrich zulassen.
  • Die Möglichkeiten gehen weiter. Sie können locker sein und mit Quantifizierern eine beliebige Anzahl von Ziffern zulassen . Ich werde nicht alle Möglichkeiten regulärer Ausdrücke in dieser Antwort behandeln.