Dynamische Dropdown-Listen für Excel basierend auf einer Matrix

907
user3673417

Ich möchte die verfügbaren Optionen in einer Reihe von Dropdown-Listen (erstellt durch Datenvalidierung) basierend auf einer Kontrollmatrix steuern.

In der Beispiel-Abbildung unten können Sie in der ersten Dropdown-Liste entweder feature1 oder feature2 auswählen. Wenn Feature1 ausgewählt ist, zeigen die X in der Matrix an, dass Features4 und 5 in der Dropdown-Liste 2 nicht zulässig sind. Dropdown-Liste 2 sollte nur die Features3 und 6 als mögliche Auswahlmöglichkeiten anzeigen. Wenn dann in der zweiten Dropdown-Liste Feature 3 ausgewählt wird, würde Dropdown-Liste 3 nur Feature8 als Option anzeigen. Feature 7 ist nicht verfügbar, wenn Feature 3 ausgewählt ist und Feature 9 durch die Auswahl von Feature1 zu Beginn ausgeschlossen wurde.

Ich hoffe, das macht Sinn. Ich wäre an den Ideen der Menschen über die besten Ansätze / Optionen zur Erreichung dieses Kontrollniveaus interessiert. Ich habe benannte Bereiche und die indirekte Funktion verwendet, um ähnliche Ergebnisse zu erzielen, jedoch nicht, wenn Sie eine Matrix verwenden, um die verfügbaren Optionen anzugeben. Ich möchte Leerzeichen in den Dropdown-Listen vermeiden.

Kontrollmatrix

1

1 Antwort auf die Frage

3
Bandersnatch

Der folgende Screenshot zeigt, wie Sie dies mithilfe einer dynamischen Liste von Werten für Ihre Dropdown-Listen tun.

Die erste Liste der Werte List Values 1wird mit Formeln definiert, wobei die Auswahl aus den ersten beiden Dropdown-Listen verwendet wird. Diese Liste implementiert die in Ihrer Matrix dargestellte Logik. Wenn ich Ihren Text nicht richtig in Formeln übersetzt habe, passen Sie ihn bitte an.

Die zweite Liste der Werte List Values 2erstellt eine dynamische, geordnete Liste der Werte von List Values 1, wobei am Ende leere Werte eingefügt werden. Die Formeln in E14und E18sind:

=IFERROR(INDEX(E$5:E$8,AGGREGATE(15,6,(ROW(E$5:E$8)-ROW(E$4))/(E$5:E$8<>""),ROWS($E$14:$E14)),1),"") =IFERROR(INDEX(E$9:E$11,AGGREGATE(15,6,(ROW(E$9:E$11)-ROW(E$8))/(E$9:E$11<>""),ROWS($E$18:$E18)),1),"") 

Schließlich erstellen zwei Formeln Arrays der nicht leeren Werte in List Values 2und werden den Namen List_2und zugewiesen List_3, mit denen die Listenwerte für Dropdowns 2 und 3 festgelegt werden. Diese Formeln werden im Screenshot angezeigt.

Ich hoffe das hilft und viel Glück. ______________________________________________________________________________________

Wie es funktioniert: Die innere AGGREGATE()Funktion oben macht das Gleiche SMALL()wie Funktion (Funktion = 15), mit der Ausnahme, dass sie die Möglichkeit hat, Fehler zu ignorieren (Option = 6), und Array-Berechnungen ausführen kann, ohne dass dies erforderlich ist CTRLShiftEnter.

Das Array arbeitet es eingeschaltet ist (ROW(E$5:E$8)-ROW(E$4))/(E$5:E$8<>""), das das Array durch die Anordnung der unterteilten True/FalseWerten, bei denen der Bereich E5:E8nicht leer ist: .

In arithmetischen Operationen mit logischen Werten, Trueund Falsewerden auf 1 und 0 umgewandelt. Die Division gibt also das Array {#DIV/0!;2;3;#DIV/0!}an und AGGREGATE()ignoriert die Fehler und gibt die Zeilennummern an, die nicht leer sind: in dem oben gezeigten Fall.

Dieses Array wird dann als row_nums in a verwendet INDEX(), von dem die nicht leeren Zeilen zurückgegeben werden E5:E8. Gibt schließlich IFERROR()ein Leerzeichen zurück, wenn INDEX()zurückgegeben wird, #NUM!wenn es weiter als die Anzahl der Werte in seiner Liste der Reihennummern gefüllt wird.

Die Formeln für die benannten Bereiche werden verwendet INDEX(), um den letzten nicht leeren Wert in jeder Liste zurückzugeben. SUM()zählt die Anzahl der nicht leeren Zellen im Bereich, und dies wird als Reihennummer für verwendet INDEX().

Das verdient 10. :-) Rajesh S vor 6 Jahren 1