Excel - DropDown, Indirekt, usw über mehrere Tabellenblätter?

3 Antworten

Von Experte Suboptimierer bestätigt

Hier ist ein Ansatz mit VBA - etwas Besseres fällt mir im Moment nicht ein. Begründung unten :)

Ein Makro, das basierend auf dem Wert in A1, ein DropDown-Feld in B1 mit den entsprechenden Werten erzeugt:

Sub getPostalCodes()
    Dim countryCode As String
    countryCode = Cells(1, 1).Value
    
    Dim range As range
    Dim Worksheet As Worksheet
    Set Worksheet = ThisWorkbook.Sheets("Tabelle1")
    
    If countryCode = "AT" Then
    Set range = Worksheet.range("B20:B24")
    End If
    
    If countryCode = "CH" Then
    Set range = Worksheet.range("C20:C24")
    End If
    
    If countryCode = "DE" Then
    Set range = Worksheet.range("A20:A24")
    End If
    
    With Worksheet.range("B1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=" & range.Address
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub

Damit das Makro automatisch ausgeführt wird, wenn du den Wert in A1 änderst, benötigst du die folgende Funktion in deinem Arbeitsblatt:

Sub Worksheet_Change(ByVal Target As range)
    If Target.Address = "$A$1" Then
        Call getPostalCodes
    End If
End Sub

Alles passiert im Moment in einem einzigen Arbeitsblatt.

Vielleicht schaffst du es, das Schnipsel an deine Bedürfnisse anzupassen. Falls nicht, gerne melden :)

Mir scheint dein Vorhaben ziemlich dynamisch zu sein, weshalb ich (als Programmierer) zu VBA greifen würde - vor allem, weil du ein Element (DropDown-Feld) erzeugen möchtest, das man mit einer Formel nicht erzeugen kann.

dazu kann man das sogenannte bedingte Drowdown nutzen, Ansätze gibt es dazu mehrere, aber ich finde diese Varianten hier recht einfach, denn es benötigt eigentlich nur mehrere intelligente Tabelle und die Funktion indirekt, die es schon seit sehr langer Zeit in Excel gibt.

Hier mal ein grobe Übersicht, wie dies realisiert werden kann.

Bild zum Beitrag

Die Tabelle Land enthält entsprechend alle Länder die im ersten Dropdown auftauchen sollen. Die anderen Spaltenköpfe müssen exakt genauso heißen, wie sie auch in der Land Tabelle heißen und jede muss für sich ebenfalls als intelligente Tabelle formatiert sein, dies geht indem man diese gesamte Tabelle als Deutschland bis 90530 markiert und strg+t drückt, dann wird man noch gefragt, ob die Tabelle Spaltenköpfe hat, wenn nicht bereits angehakt, dann einfach mit dem haken bestätigen.

Bild zum Beitrag

Sobald die Tabelle angelegt ist wird diese so farbig wie in meine Bild. nun gibt es direkt nach Hilfe einen weiteren Reiten Tabellenentwurf, dort draufklicken und ganz links unter Tabellennamen, diese so nennen, wie auch das Land heißt, was diese Tabelle abbildet.

Bild zum Beitrag

Die Tabelle Land kann dabei heißen wie sie will, in meinem Falle heißt sie Länder, du musst dir diesen Namen nur merken, denn den Namen brauchst du gleich.

unter Land (B3) befindet sich ein Dropdown, dort habe ich unter Daten -> Datentools Datenüberprüfung -> Liste folgendes eingegeben:

=indirekt("Tabellenname") 

in meinem Falle lautet der Tabellenname Länder also

Bild zum Beitrag

=indirekt("Länder")

in der Zelle C3 kannst du dir nun zunutze machen, dass alle Tabellen genauso heißen, wie die Länder in der Tabelle Land und gehst wieder in Daten -> Datentools -> Datenüberprüfung -> Liste gibst einfach ein

Bild zum Beitrag

=indirekt($B$3)

ggf. taucht nach dem bestätigen eine vermeintliche Fehlermeldung auf, die kann aber einfach bestätigt werden.

und schon ist alles fertig.

Bild zum Beitrag

Die erste Liste kann man auch wie unten von @maexchen vorgeschlagen statisch verlinken, Nachteil ist, dass man diese dann jedes mal neue verlinken muss, wenn neue Einträge hinzu kommen, hier erweitert sich der Bereich automatisch, wenn ich ein neues Land hinzufüge, ich muss dann nur logischerweise auch eine neue Tabelle für dieses Land hinzufügen, andernfalls ist das 2 Dropdown unter PLZ leer.

Anmerkung

Leider unterstützt Excel im Dropdown Listenfeld keine kombinierten indirekt eingaben, sonst könnte man die gesamte Tabelle in denen die Länder inklusive PLZ stehen als eine intelligente Tabelle definieren mit dem Namen Länder und dann z.B.

=indirekt("Länder[#Kopfzeilen]")

sich im ersten Dropwdown alle Länder abholen - das funktioniert noch

aber leider scheitert

=indirekt("Länder["&B3&"]")

gibt man dies als Formel ins Tabellenblatt ein funktioniert es ohne Problem aber als Listenfeld geht es leider nicht, ich hoffe hier bessert Excel ggf. noch nach. Dies würde das ganze deutlich dynamischer machen, da nur noch eine Tabelle gepflegt werden muss.

Woher ich das weiß:Berufserfahrung – sowohl Beruf als auch Hobby
 - (Microsoft Excel, Formel, Excel-Formel)  - (Microsoft Excel, Formel, Excel-Formel)  - (Microsoft Excel, Formel, Excel-Formel)  - (Microsoft Excel, Formel, Excel-Formel)  - (Microsoft Excel, Formel, Excel-Formel)  - (Microsoft Excel, Formel, Excel-Formel)