AW: Mehrere Ergebnisse als DropDown darst.?
04.01.2023 18:11:17
Yal
Moin,
ganz einfach ist es nicht.
Was Du möchtest, die Dropdown-Liste, ist mit "Datenüberprüfung" zu haben. Diese ist per Hand unter Menü "Daten", "Datenüberprüfung" zu haben.
Nun sollte diese Auswahlilste in Spalte C sich jedesmal ändern, wenn in Spalte B bzw. A einen neuen Wert eingetragen wird.
d.h., bei Änderung in TB2!Ax
_ Wert in TB2!Bx lesen
_ neue Liste auf Basis von TB1, Spalte B als Filter, Spalte C als Werte für die Liste
_ Liste als Datenüberprüfung in TB2!Cx setzen
Auf dem Reiter vom Blatt TB2 rechtklicken und "Code anzeigen" auswählen. Dort folgende Code copy-pasten und eventuell BlattName in "Eigenschaften_auflisten" anpassen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Z As Range
Dim Erg
Application.EnableEvents = False
For Each Z In Target.Cells
If Z.Column = 2 Then 'nur Spalte 2 "B"
With Z.Offset(0, 1)
Erg = Eigenschaften_auflisten(Z.Value)
.Validation.Delete
.ClearContents
If UBound(Erg) >= 0 Then .Validation.Add Type:=xlValidateList, Formula1:=Join(Erg, ",")
End With
End If
Next
Application.EnableEvents = True
End Sub
Private Function Eigenschaften_auflisten(ByVal Filter As String)
Dim D As Object 'Dictionary. Listet alle Einträge nur einmal (Eindeutig)
Dim Z As Range 'Objekt für einzelne Zelle
Const cBlattName = "TB1"
Filter = LCase(Filter) 'Filter aus Kleinschreibung umstellen
Set D = CreateObject("Scripting.Dictionary")
With Worksheets(cBlattName)
For Each Z In Range(.Range("B2"), .Cells(.Rows.Count).End(xlUp))
If LCase(Z.Value) = Filter Then D(Z.Offset(1, 0).Value) = 1
Next
End With
Eigenschaften_auflisten = Array() 'Default-Value
If D.Count > 0 Then Eigenschaften_auflisten = D.Keys
End Function
VG
Yal