2016-04-11 5 views
2

Ich muss zwei Dropdown-Listen in Excel erstellen. Die zweite hängt von der ersten ab. Also habe ich die dynamischen Daten (werde ich ständig Fahrzeuge und Motoren zu ändern haben):Wie erstellt man dynamische abhängige Liste in Excel VBA?

enter image description here

Das erste Drop-Down-ich will, ist, die Fahrzeuge angezeigt werden soll. Der zweite zeigt die für dieses Fahrzeug verfügbaren Motoren an.

Ich habe durch das Internet geschaut und der Vorschlag ist, einen Namensbereich für jedes Fahrzeug zu erstellen, aber ich hatte gehofft, eine bessere Lösung wie ein VlookUp zu haben, das eine Liste zurückgeben würde.

Ich verwende die folgenden Fahrzeuge und Motoren in einen Name Bereich zu erhalten:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Intersect(Target, Columns("B:B")) Is Nothing Then Exit Sub 
Dim lRow As Integer 

lRow = Range("B" & Rows.Count).End(xlUp).Row 

Range("B3:B" & lRow).Name = "VehList" 

Range("C3:C" & lRow).Name = "CalList" 
+0

so sein müßten eindeutig sein sollten? http://stackoverflow.com/questions/36415648/getting-the-value-of-a-listbox-to-dynamically-change-with-worksheets/36435585#36435585 –

Antwort

2

Für einfache Fälle, brauchen Sie nicht VBA oder Definierte Namen.

Bedenken Sie:

enter image description here

Wir haben ein Drop-down in A1 entweder Obst oder Hund oder Katze auszuwählen. Wir möchten ein Dropdown-Menü in A2 einrichten, um die richtige Unterliste anzuzeigen.

Wir klicken auf A2 und Einrichtung DV mit der Liste Option und der folgenden Formel in Quelle:

=IF(A1="fruit",C1:C4,IF(A1="dog",D1:D4,E1:E4)) 

enter image description here

Dies ist für nur drei Optionen in in der primäre Pulldown. Wenn Ihr Fall zu viele Optionen in der primären Pull-down hat, die Verschachtelung der IF() kann eine Einschränkung sein.

+0

Danke, aber meine Listen ändern immer ihre Werte. Ich verstehe nicht, wie Sie Ihren Vorschlag anwenden können. Und sie sind immer in dem Format, das ich gezeigt habe. – peetman

2

eine Referenzzelle Namen, eine dynamische Referenzzelle Namen und einige Datenvalidierung Listen, können wir dies erreichen ...

Ein Beispiel Tabelle:

Vehicle      Engines      
V01  V01E01 V01E02 V01E03 V01E04 V01E05 V01E06 V01E07 
V02  V02E01 V02E02 V02E03 V02E04 V02E05 V02E06 
V03  V03E01 V03E02 V03E03 V03E04   
V04  V04E01 V04E02 V04E03 V04E04 V04E05  
V05  V05E01 V05E02 V05E03 V05E04 V05E05 V05E06 
V06  V06E01 V06E02 V06E03 V06E04 V06E05 V06E06 V06E07 
V07  V07E01 V07E02 V07E03 V07E04   
V08  V08E01 V08E02     

Fahrzeugtypen angegeben vertikal und ihre abhängigen Motoren horizontal

Ich nannte die Zelle, die in ihm geschrieben ‚Fahrzeug‘ als ‚VE‘, erstellt dann die erste Dropdown Listendatenvalidierung in Cell C $ 12 $ nach der folgenden Formel verwendet:

= Versatzes (VE, 1,0, COUNTA (OFFSET (VE, 1,0,10,1)), 1)

Ich habe dann einen dynamischen benannten Bereich 'VITEM' genannt, die die folgende Formel hatte:

= INDEX (OFFSET (VE, 1,0,10,1), MATCH ($ 12 $ C, OFFSET (VE, 1,0,10,1), 0))

VITEM daher wird als die Zelle zugeordnet, das Fahrzeug enthält, in der ersten Auswahlfeld angegeben

Für die zweite Dropdown-Box I dann Daten verwendet Validierung erneut mit der folgenden Formel:

= OFFSET (VITEM, 0,1,1, COUNTA (OFFSET (VITEM, 0,1,1,10)))

einige Anmerkungen: Die Listen sind so bemessen, je nachdem, wie viele nicht - Leere Zellen sind in einem bestimmten Bereich innerhalb der Offsets vorhanden (in diesem Code wird ein 10x1-Zellensatz verwendet). Wie es Auto-Größen, sollte die Fahrzeugliste angrenzende vertikal und die horizontal aufgeführten Motoren wieder zusammenhängende

Fahrzeugnamen, so wird ‚VITEM‘ zugewiesen

dies richtig etwas mag
+0

Danke für Ihre Antwort. Ich habe es geschafft, dass die erste Dropdown-Liste funktionierte, aber nicht die zweite. Ich denke, es liegt daran, dass Sie die Engines horizontal anzeigen, und ich brauche es vertikal, wie ich in der Frage gezeigt habe. Könnten Sie mir bitte helfen, die Formel zu modifizieren? Vielen Dank – peetman

Verwandte Themen