Microsoft Excel

Herbers Excel/VBA-Archiv

Inhalt Combobox jede 41ste Zelle

Betrifft: Inhalt Combobox jede 41ste Zelle von: Andreas
Geschrieben am: 05.08.2014 14:25:22

Hallo Excelprofis,

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

  

Betrifft: AW: Inhalt Combobox jede 41ste Zelle von: Daniel
Geschrieben am: 05.08.2014 14:34:30

Hi

die Combobox muss zweispaltig angelegt werden (ColumCount-Eigenschaft auf 2 setzen)

Befüllung:

With Combobox1
.Clear
For i = 1 to 15378 Step 41
    if Cells(i, 2) <> "" Then 
       .AddItem Cells(i, 2).value
       .List(.ListCount - 1, 1) = i
    end if
Next
End with
die Zeilennummer des gewählten eintrags bekommst du dann mit:
=Combobox1.List(Combobox1.ListIndex, 1)

oder mit:
=Combobox1.Value
wenn du die BoundColumn-Eigenschaft auf 2 setzt.

Gruß Daniel


  

Betrifft: AW: Inhalt Combobox jede 41ste Zelle von: Andreas
Geschrieben am: 05.08.2014 15:02:01

Hallo Daniel,

Vielen Dank für die Hilfe, klappt super. Noch ne kleine Frage: gibt es eine Möglichkeit, dass ich trotzdem nur eine Spalte in der Combobox angezeigt bekomme. Über die Breite der Combobox gehts nicht, weil die Zelleinträge unterschiedlich breit sind.

Nochmals Danke für die Hilfe.

mfg, Andreas


  

Betrifft: AW: Inhalt Combobox jede 41ste Zelle von: Daniel
Geschrieben am: 05.08.2014 15:07:27

über die Eigenschaft ColumnWidth kannst du regeln, wie breit die Spalten in der Klappliste sein sollen. Zum Ausblenden für die Spalte 0 eingeben, dh in deinem Fall vielleicht: "50;0" als ColumnWidth.

im Textfeld kannst du sowieso nur einen Wert anzeigen lassen, hier stellst du die Spalte über die Eigenschaft "Textcolumn" ein.

Gruß Daniel


  

Betrifft: Vielen Dank für die Hilfe! Schönen Tag noch. owT. von: Andreas
Geschrieben am: 05.08.2014 15:22:23

.


 

Beiträge aus den Excel-Beispielen zum Thema "Inhalt Combobox jede 41ste Zelle"