Excel-Validierungsliste nur in Großbuchstaben

969
XtremeBaumer

Ich möchte eine Datenvalidierung in meiner Excel-Arbeitsmappe durchführen. Ich möchte so viele zentralisierte Werte wie möglich für die Datenvalidierung verwenden, da dieselben Werte für mehrere Arbeitsblätter verwendet werden. Jetzt habe ich einige Validierungen für Währungscodes (USD ...) hinzugefügt. Die Validierung basiert auf einer Liste in einem anderen Blatt und ist funktionstüchtig. Mein Problem ist, dass ich immer noch Kleinbuchstaben eingeben kann und nicht nur exakte Werte. Mir wäre eine Lösung lieber, die VBA nicht verwendet. Wenn dies nur mit VBA möglich ist, fügen Sie bitte einige Informationen dazu hinzu, wie Sie es zur Arbeitsmappe hinzufügen können.

Die Werte, die ich zulassen möchte, sind:

CHF EUR GBP USD DKK SEK NOK 

und die Datenüberprüfung sieht folgendermaßen aus: =Sheet1!$S$2:$S$8Die obigen Werte sind jedoch auch als Kleinbuchstaben zulässig, was ich nicht will (ich sehe, dass ich die Werte innerhalb der Datenüberprüfung auflisten kann und dann nur exakte Übereinstimmungen akzeptiert, aber nicht Ich habe viel Arbeit, wenn sich die Werte ändern, ich möchte, dass sie zentralisiert werden.

Ich denke, es wäre auch gut genug, um die Werte in Großbuchstaben umzuwandeln, aber es muss in derselben Zelle geschehen, z. Ich gebe eurin Zelle ein, J6dann sollte es den Wert in Großbuchstaben umwandeln und auch in schreibenJ6

0
Wenn Sie eine Liste in das Kombinationsfeld eingeben, anstatt einen Bereich zu verwenden, sollte die Groß- / Kleinschreibung mit * übereinstimmen. mcalex vor 6 Jahren 0
Ist Ihr Eingabebereich ein zusammenhängender Bereich? IQV vor 6 Jahren 0
@mcalex das ist wahr, aber wenn ich einen Wert hinzufügen / löschen möchte, ist das viel Arbeit. Idealerweise hätte ich 100 Zellen als Gültigkeitsbereich, aber nur die nicht leeren Zellen sollten angezeigt werden (keine leeren Werte in der Liste, auch wenn nur 5 von 100 Zellen einen Wert enthalten). Außerdem sollte die Groß- und Kleinschreibung mit der verwendeten Zellreferenz übereinstimmen XtremeBaumer vor 6 Jahren 0
@IQV ist ein benannter Bereich, aber ich habe darüber nachgedacht, eine benannte Tabelle zu verwenden, aber ich kann nicht auf die Tabellen im Assistenten für die Datenprüfung verweisen XtremeBaumer vor 6 Jahren 0

2 Antworten auf die Frage

1
Andi Mohr

Wenn sich die Zelle, die Sie überprüfen möchten, in Zelle A1 befindet, setzen Sie den Datenvalidierungstyp auf " Benutzerdefiniert" anstatt "Liste" und fügen Sie diese Formel in Folgendes ein:

=AND(SUMPRODUCT(--((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>64)),--(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<91))=LEN(A1),--(IFERROR(IF(MATCH(A1,Sheet1!$S$2:$S$8,0),1),0))) 

Komplettlösung

Diese Formel verwendet zwei Bedingungen, kombiniert mit AND()- erstens einer Prüfung, ob der Wert nur aus Großbuchstaben besteht, und zweitens, ob der Wert Ihrer Liste der zulässigen Optionen entspricht.

 =AND( SUMPRODUCT( --( (CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>64) ) ,--(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<91) )=LEN(A1) ,--(IFERROR(IF(MATCH(A1,Sheet1!$S$2:$S$8,0),1),0))) 

Die Bits, die aussehen, CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>64prüfen den ASCII-Code für jedes einzelne Zeichen. Wenn sie zwischen den ASCII-Codes 64 und 91 liegen, wissen wir, dass sie Großbuchstaben sind. Wenn die Anzahl der Großbuchstaben der Länge der Wertzeichenfolge entspricht, wissen wir, dass sie alle Großbuchstaben sind.

Der MATCH()Teil prüft, ob der Wert in Ihrer Währungsliste angezeigt wird.

Hinweis: Rufen Sie diesen Beitrag für die Großbuchstabenprüfung auf.

Ich erhalte eine Fehlermeldung, wenn ich versuche, das forumla als Datenvalidierung in benutzerdefinierten Formaten zu verwenden: Es gibt ein Problem mit dieser Formel.` = AND (PRODUKT (- ((CODE (W6, ROW (INDIRECT ("1:" & LEN (W6))), 1))> 64)) - (CODE (MID (W6, REIHE (INDIREKT (1: "& LEN (W6))), 1)) <91)) = LEN (W6) , - (IFERROR (WENN (W6, Sheet1! $ S $ 2: $ S $ 8,0), 1), 0))) `sollte für ein Beispiel richtig sein XtremeBaumer vor 6 Jahren 0
@ XtremeBaumer Sie scheinen einen frühen Tippfehler in der Formel zu haben. Es sollte "SUMPRODUCT (...") sein, nicht "PRODUCT (...". Alles andere sieht in Ordnung aus. Andi Mohr vor 6 Jahren 0
Wenn Sie `Sheet1! $ S $ 2: $ S $ 8` durch einen benannten Bereich ersetzen möchten, damit Sie den Bereich nicht bearbeiten müssen, wenn Sie neue Werte hinzufügen, können Sie dies tun. Andi Mohr vor 6 Jahren 0
1
IQV

Ich habe eine Lösung mit VBA gefunden:
Klicken Sie mit der rechten Maustaste auf die Registerkarte Ihres Arbeitsblatts und wählen Sie "Code anzeigen ...". Im VBA-Editor geben Sie folgendes Makro ein:

Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1:C100")) Is Nothing Then On Error GoTo ErrorHandler Application.EnableEvents = False Target.Value = UCase(Target) ErrorHandler: Application.EnableEvents = True End If End Sub 

Ändern Sie den Bereich entsprechend Ihren Anforderungen. Sie müssen Ihre Datei als speichern *.xlsm. Dann wird jeder Text im Bereich in Großbuchstaben umgewandelt.

der Bereich ist im Grunde die Spalte richtig? Die Reichweite beginnt bei J6 und reicht so lange wie nötig. also würde ich den Bereich auf `J6: J` ändern? XtremeBaumer vor 6 Jahren 0
Sie können "J: J" verwenden. IQV vor 6 Jahren 0
Nun, die Spalte hat einen Header in Zeile 3, der mit keinem Wert übereinstimmt. Deshalb würde ich gerne mit Zeile 6 beginnen, da dort die Daten beginnen XtremeBaumer vor 6 Jahren 0
Dann müssen Sie "J6: J1048576" oder eine Zeilennummer für das Ende verwenden, die Ihren Anforderungen entspricht. IQV vor 6 Jahren 0
Um die Funktionalität für mehrere Arbeitsblätter zu aktivieren, muss ich den Code für jedes Blatt hinzufügen, oder? XtremeBaumer vor 6 Jahren 0
Brauchen Sie etwas Zeit, um es zu prüfen und zu testen ... IQV vor 6 Jahren 0
nvm hat es einfach manuell zu jedem Blatt hinzugefügt, da sich die Spalten unterscheiden. trotzdem danke. Jetzt muss der Wert von der Liste überprüft werden. Wenn er funktioniert, wird er in Großbuchstaben umgewandelt XtremeBaumer vor 6 Jahren 0