Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1040to1044
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ComboBox ohne Duplikate füllen

ComboBox ohne Duplikate füllen
21.01.2009 18:53:00
Kasimir
Hallo Leute,
ich steh vor einem Problem und mir ist noch nicht so ganz klar, wie ich dies lösen soll. Ich bin dabei mir eine Termindatei für Wartungsarbeiten zu erstellen. Nun möchte ich über eine UserForm nach bestimmten Dingen in diesem Terminblatt suchen. Die Auswahl erfolgt in einer ComboBox. Soweit ist das auch noch nicht das Problem. Allerdings möchte ich auch nach einem Datum suchen und da fängt mein Problem an. Im Tabellenblatt steht das Datum in Spalte C. Dort steht z.B. 21.01.2009 oder auch 21.01.2010. Nun möchte ich alle Datumswert aus Spalte C in eine ComboBox einlesen. Allerdings nur 6 Stellen von dem Datum. Also für das Datum 21.01.2009 nur 21.01. . Da ich aber mehrere Datumswerte habe, die am 21. Januar sind, sich aber zum Teil nur vom Jahr unterscheiden, möchte ich natürlich nur 1x das Datum 21.01. in der ComboBox haben, Sprich es sollen keine Duplikate vom 21.01. eingelesen werden. Bisher habe ich immer Werte ohne Duplikate mit der Zeile
If WorksheetFunction.CountIf(Sheets("Termine ").Range("C2:C" & iRow), _
Sheets("Termine").Cells(iRow, 3)) = 1 Then _
ComboBox3.AddItem Mid(Sheets("Termine ").Cells(iRow, 3), 1, 6)

eingelesen. Allerdings wird hier die gesamte Zelle abgefragt und da funktioniert das. Ich muss aber nur 6 Stellen der Zelle prüfen und es darf dann das Datum 21.01.nur einmal in der ComboBox erscheinen.
Ich hoffe, jemand hat verstanden, was ich realisieren möchte und hat einen Tipp für mich.
Danke Euch schon mal im Voraus,
Kasimir

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ComboBox ohne Duplikate füllen
21.01.2009 19:13:00
Kasimir
Hallo Hajo,
danke Dir für Deine Antwort. Auf die Idee, das Blatt vorher zu sortieren und dann nur die Zelle mit der Zelle aus der Zeile vorher zu vergleichen bin ich nicht gekommen. Aber es funktioniert bestens.
Gruß,
Kaismir
AW: ComboBox ohne Duplikate füllen
21.01.2009 19:37:00
ransi
HAllo KAsimir
VErsuch mal sowas:
Public Sub füllen()
Dim Dic
Dim L As Long
Dim arr
Dim lng_Row As Long
lng_Row = 1000 'Beispiel
Set Dic = CreateObject("Scripting.Dictionary")
arr = Range("C1:C" & lng_Row)
For L = 1 To lng_Row
    Dic(Day(arr(L, 1)) & "." & Month(arr(L, 1)) & ".") = 0
Next
ComboBox1.List = Dic.keys
End Sub

ransi
Anzeige
AW:@ransi- ComboBox ohne Duplikate füllen
21.01.2009 20:35:50
robert
hi,
ich finde den code genial,
aber was passiert in dieser zeile eigentlich?
Dic(Day(arr(L, 1)) & "." & Month(arr(L, 1)) & ".") = 0
wenn möglich, bitte erklärung
gruß
robert
AW: AW:@ransi- Danke-owT
21.01.2009 20:51:00
robert
AW: ComboBox ohne Duplikate füllen
22.01.2009 05:30:00
Kasimir
Hallo ransi,
danke auch Dir für Deinen Vorschlag. Er funktioniert bestens. Allerdings würde mich interessieren, wie der Code aussehen müsste, damit die Werte auch noch sortiert in die ComboBox eingelesen werden. Ich habe die Werte mal in ein Tabellenblatt ausgeben lassen und dann versucht die Werte zu sortieren. Leider wird nicht so sortiert, wie ich es mir vorstelle.
Mal als Beispiel: Ich habe folgende Werte:
12.02.
18.04.
25.05.
30.05.
02.02.
21.01.
22.01.
23.01.
24.01.
25.01.
26.01.
27.01.
28.01.
29.01.
06.01.
Dann sieht das Ergebnis nach einer Sortierung folgendermaßen aus:
02.02.
06.01.
12.02.
18.04.
21.01.
22.01.
23.01.
24.01.
25.01.
25.05.
26.01.
27.01.
28.01.
29.01.
30.05.
Es wird nach der Tageszahl sortiert. Es sollte aber nach dem Tag und dem Monat sortiert werden:
06.01.
21.01.
22.01.
23.01.
24.01.
25.01.
26.01.
27.01.
28.01.
29.01.
02.02.
12.02.
18.04.
25.05.
30.05.
Wie kann ich das mit Deinem Code und einer Erweiterung erreichen?
Danke Dir,
Kasimir
Anzeige
AW: ComboBox ohne Duplikate füllen
22.01.2009 08:49:00
Tino
Hallo,
ich kenne mich mit Dictionary nicht besonders aus, hier aber mal eine Lösung.
Das Datum wird in eine Area geschrieben und diese Area wird zuerst Sortiert und danach ins richtige Format gebracht und am Ende an die Combo übergeben.
Option Explicit
Dim sArray
Sub QuickSort(ByVal MinElem As Long, MaxElem As Long)

Dim Mitte As Long
Dim vDummy As Variant
Dim i As Long, j As Long

    If MinElem > MaxElem Then
        Exit Sub
    End If
 
    Mitte = (MinElem + MaxElem) \ 2
    i = MinElem
    j = MaxElem
    Do

        Do While sArray(i) < sArray(Mitte)
            i = i + 1
        Loop

        Do While sArray(j) > sArray(Mitte)
            j = j - 1
        Loop
 
        If i <= j Then
 
            vDummy = sArray(j)
            sArray(j) = sArray(i)
            sArray(i) = vDummy ' Format(Day(vDummy), "00") & "." & Format(Month(vDummy), "00") 
 
            i = i + 1
            j = j - 1
        End If
 
    Loop Until i > j
 
    QuickSort MinElem, j
    QuickSort i, MaxElem
End Sub

Public Sub füllen()
Dim Dic
Dim L As Long
Dim lng_Row As Long

lng_Row = Cells(Rows.Count, 3).End(xlUp).Row 'Beispiel 
Set Dic = CreateObject("Scripting.Dictionary")
sArray = Range("C1:C" & lng_Row)

For L = 1 To lng_Row
   If sArray(L, 1) <> "" Then
      Dic(CDate(sArray(L, 1))) = 0
   End If
Next
sArray = Dic.keys

QuickSort Lbound(sArray), Ubound(sArray)

For A = Lbound(sArray) To Ubound(sArray)
 sArray(A) = Format(sArray(A), "dd.") & Format(sArray(A), "mm.")
Next A

ComboBox1.Clear
ComboBox1.List = sArray

Erase sArray
End Sub


Gruß Tino

Anzeige
AW: ComboBox ohne Duplikate füllen
23.01.2009 13:39:41
ransi
HAllo Kasimir
Den Code zu erweitern ist dann etwas schwierig.
Versuch alternativ zu Tinos Code mal sowas:
System.Collections.ArrayList ist zwar etwas "exotisch", sollte aber ab XP laufen:
Option Explicit

Public Sub füllen()
Dim AL As Object
Dim L As Long
Dim arr As Variant
Dim TMP As Date
Dim lng_Row As Long
lng_Row = 1000 'Beispiel
Set AL = CreateObject("System.Collections.ArrayList")
arr = Range("C1:C" & lng_Row)
With AL
    For L = 1 To lng_Row
        TMP = DateSerial(0, Month(arr(L, 1)), Day(arr(L, 1)))
        If Not .contains(TMP) Then .Add TMP
    Next
    .Sort
    arr = .toArray
    For L = LBound(arr) To UBound(arr)
        arr(L) = Format(arr(L), "DD.MM.")
    Next
End With
ComboBox1.List = arr
End Sub


ransi
Anzeige
AW: ComboBox ohne Duplikate füllen
22.01.2009 09:20:59
robert
hi,
frage -warum stört dich das ganze datum in der combobox?
z.B.hast du 21.1.2009
und 21.1.2010
dann hast du in der combobox 21.1. stehen, aber weisst nichr , welches jahr
ist das so gewollt ?
gruß
robert

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige