Mit folgendem Code fülle ich eine ComboBox (UserForm) mit Werten des Zellbereiches B1 bis B100, wobei alle leeren Zellen nicht angezeigt werden. Danke an dieses Forum.
Jetzt benötige ich etwas ähnliches. Jetzt soll eine Combobox die Werte der Zellen B1, B42,B83 (also jede 41ste Zelle) bis Zelle B 15378 beinhalten und dabei alle Leeren auslassen. Später möchte ich dann per Commandbutton in die Zeile der Comboboxauswahl springen.
Kann mir bitte Jemand helfen.
Private Sub UserForm_Initialize()
ComboBox500.List = UniqueList(Worksheets("Einzelliste").Range("B1:B100"))
End Sub
' erzeugt aus einem Bereich ein Array ohne doppelte Werte
Function UniqueList(Matrix As Range) As Variant
Dim objDic As Object ' ein Dictionary-Objekt, benutzt werden nur die Keys, nicht die Werte
Dim rngCell As Range ' eine Zelle im Bereich
Set objDic = CreateObject("Scripting.Dictionary") ' das Dictionary erzeugen
For Each rngCell In Matrix ' alle Zellen des Bereichs durchlaufen
' im Dictionary dem Objekt mit dem Key rngCell.Value (das ist der Zellinhalt) 0 zuweisen
' falls dieses Objekt noch nicht existiert wird es automatisch angelegt
' falls es bereits existiert wird ihm erneut 0 zugewiesen
' -> in objDic gibt es keine doppelte Keys !!!
If rngCell.Value "" Then objDic(rngCell.Value) = 0
Next
UniqueList = objDic.keys ' das liefert nun ein Array mit allen Keys
Set objDic = Nothing
End Function
Danke fürs lesen!
mfg, Andreas