Herbers Excel-Forum - das Archiv
gefilterte Daten von Exceltabelle in Listbox
Informationen und Beispiele zu den hier genannten Dialog-Elementen:

|
Betrifft: gefilterte Daten von Exceltabelle in Listbox
von: Reinhard
Geschrieben am: 29.11.2003 18:15:39
Hallo Welt,
wie kann ich aus einer Exceldatenbank gefilterte Daten in einer VBA-Listbox anzeigen?
Und wie kann ich Doppeleinträge in einer VBA-Listbox ausblenden?
Im voraus für eine Antwort, Danke!
Betrifft: AW: gefilterte Daten von Exceltabelle in Listbox
von: K.Rola
Geschrieben am: 29.11.2003 18:55:31
Hallo,
Listbox in userform oder Tabelle? Soll die MatchEntry- Eigenschaft
genutzt werden? Einspaltig oder mehrspaltig?
Gruß K.Rola
Betrifft: AW: gefilterte Daten von Exceltabelle in Listbox
von: Reinhard
Geschrieben am: 29.11.2003 19:08:59
Hallo,
ich benutze die Listbox in Userform.
Die MatchEntry-Eigenschaft kenn ich nicht, also egal.
Die Listbox nutze ich mehrspaltig, spielt das eine Rolle.
Gruß
Reinhard
Betrifft: AW: gefilterte Daten von Exceltabelle in Listbox
von: K.Rola
Geschrieben am: 29.11.2003 19:25:06
Hallo,
matchentry bedeutet, dass du durch Eingabe eines oder mehrerer
Zeichen in der Listbox suchen kannst, nicht gerade unwichtig.
Gruß K.Rola
Betrifft: AW: gefilterte Daten von Exceltabelle in Listbox
von: Reinhard
Geschrieben am: 29.11.2003 19:41:53
Hallo,
ich habe in der Excelhilfe nachgesehen, ganz toll aber nicht das was ich suche.
ich suche eine Lösung für folgendes Beispiel:
Datenbank in Exceltabelle:
Nummer Name Vorname
1 müller heidi
2 huber zenzi
2 jakob susi
3 huber walburga
4 meier kresszenz
jetzt möchte ich in der Listbox angezeigt sehen:
Listbox1
1 müller heidi
2 huber zenzi
3 huber walburga
4 meier kresszenz
oder in einer zweiten
Listbox2
2 huber zenzi
3 huber walburga
Gruß
Reinhard
Betrifft: noch offen
von: K.Rola
Geschrieben am: 29.11.2003 20:54:54
Hallo,
ich blende mich mal aus, weil ich die Aufgabenstellung nicht
richtig verstehe.
Gruß K.Rola
Betrifft: Noch offen
von: Reinhard
Geschrieben am: 30.11.2003 02:44:17
Hallo Namenskollege,
dein Beispiel ist anscheinend nicht nur mir unklar.
Soll in Listbox1 gezeigt/gefiltert werden:
Alle Namen die in Spalte 'Nummer' einen einzigartigen Wert haben.
Kommt die Nummer mehrfach vor, so wird der erste Eintrag mit dieser Nummer genommen.
Soll in Listbox2 gezeigt/gefiltert werden:
Liste alle Namenssätze auf die in Spalte 'Namen' gleich sind.
Gruß
Reinhard
ps: K.Rola ist sehr gut und hätte dir sicher gut helfen können, aber es macht keinen Spass einem Fragesteller zu helfen wenn die Informationen so spärlich fliessen.
Betrifft: AW: Noch offen
von: Reinhard
Geschrieben am: 30.11.2003 09:18:39
Hallo Reinhard,
mein Beispiel hast Du absolut richtig erkannt, und Danke für den Hinweis.
Ich könnte meine Listbox auch mit einer Schleife und suchen/vergleichen füllen. Aber da gibt es doch sicherlich eine bessere Lösung.
Gruß
Reinhard
Betrifft: AW: Noch offen
von: Nepumuk
Geschrieben am: 30.11.2003 10:27:24
Hallo Reinhard,
du schreibst aus eine Exceldatenbank gefilterte Werte. Ist in der Exceltabelle ein Autofilter gesetzt?
Gruß
Nepumuk
Betrifft: AW: Noch offen
von: Reinhard
Geschrieben am: 30.11.2003 10:38:30
Hallo Nepumuk,
ich möchte aus einer Exceldatenbank gefilterte Werte in einer Listbox darstellen.
Es ist kein Autofilter gesetzt. Kann man das mit einem Filter machen.
Gruß
Reinhard
Betrifft: AW: Noch offen
von: Nepumuk
Geschrieben am: 30.11.2003 10:53:00
Hallo Reinhard,
dann besser mit Arrys arbeiten. Diese Vorgehensweise ist wesentlich schneller als Zell- und Listboxeinträge zu vergleichen.
Mein Vorschlag:
Option Explicit
Private Sub UserForm_Activate()
Dim strArray1() As String, strArray2() As String, varArray() As Variant
Dim lngZeile As Long, intSpalte As Integer, bolgefunden As Boolean
Dim lngDoppelt As Long, lngArrayzeile As Long, strZwischenspeicher() As String
ReDim strZwischenspeicher(0)
varArray = Range(Cells(2, 1), Cells(Cells(65536, 1).End(xlUp).Row, 3))
'Keine doppelten Nummern
For lngZeile = 1 To UBound(varArray)
For lngArrayzeile = 1 To UBound(strZwischenspeicher)
If varArray(lngZeile, 1) = strZwischenspeicher(lngArrayzeile) Then bolgefunden = True: Exit For
Next
If Not bolgefunden Then
lngDoppelt = lngDoppelt + 1
ReDim Preserve strZwischenspeicher(0 To lngDoppelt)
strZwischenspeicher(lngDoppelt) = varArray(lngZeile, 1)
Else
bolgefunden = False
End If
Next
ReDim strArray1(1 To lngDoppelt, 1 To 3)
lngDoppelt = 0
ReDim strZwischenspeicher(0)
For lngZeile = 1 To UBound(varArray)
For lngArrayzeile = 1 To UBound(strZwischenspeicher)
If varArray(lngZeile, 1) = strZwischenspeicher(lngArrayzeile) Then bolgefunden = True: Exit For
Next
If Not bolgefunden Then
lngDoppelt = lngDoppelt + 1
ReDim Preserve strZwischenspeicher(0 To lngDoppelt)
strZwischenspeicher(lngDoppelt) = varArray(lngZeile, 1)
For intSpalte = 1 To 3
strArray1(lngDoppelt, intSpalte) = varArray(lngZeile, intSpalte)
Next
Else
bolgefunden = False
End If
Next
'Doppelte Namen
lngDoppelt = 0
For lngZeile = 1 To UBound(varArray)
For lngArrayzeile = 1 To UBound(varArray)
If varArray(lngZeile, 2) = varArray(lngArrayzeile, 2) And lngZeile <> lngArrayzeile Then lngDoppelt = lngDoppelt + 1: Exit For
Next
Next
ReDim strArray2(1 To lngDoppelt, 1 To 3)
lngDoppelt = 0
For lngZeile = 1 To UBound(varArray)
For lngArrayzeile = 1 To UBound(varArray)
If varArray(lngZeile, 2) = varArray(lngArrayzeile, 2) And lngZeile <> lngArrayzeile Then
lngDoppelt = lngDoppelt + 1
For intSpalte = 1 To 3
strArray2(lngDoppelt, intSpalte) = varArray(lngZeile, intSpalte)
Next
Exit For
End If
Next
Next
ListBox1.List = CVar(strArray1)
ListBox2.List = CVar(strArray2)
End Sub
Code eingefügt mit: Excel Code Jeanie
Gruß
Nepumuk
Betrifft: AW: Noch offen
von: Reinhard
Geschrieben am: 30.11.2003 11:46:15
Hallo Nepumuk,
vielen Dank für Deine Mühe mir zu helfen.
Aber ich bekomme es immer noch nicht hin.
Es scheitert bei mir scheinbar schon an den einfachsten Dingen.
Bei der Zuweisung "varArray = Range(Cells(2, 1), Cells(Cells(65536, 1).End(xlUp).Row, 3))
" bekomme ich den Kompilierfehler "keine Zuweisung an Datenfeld möglich"
Ich find es nicht heraus, was ich falsch mache.
Ich freue mich auf eine zweite Hilfe von Dir.
Gruß
Reinhard
Betrifft: AW: Noch offen
von: Nepumuk
Geschrieben am: 30.11.2003 11:54:23
Hallo Reinhard,
mach mal in der ersten Programmzeile in der: varArray() As Variant die Klammenr nach varArray weg.
Gruß
Nepumuk
P.S. Ich bin davon ausgegangen, dass deine Daten in Spalte A bis C ab Zeile 2 zu finden sind.
Betrifft: Lösung erhalten
von: Reinhard
Geschrieben am: 30.11.2003 12:19:05
Hallo Nepumuk,
ich bin begeistert, es funktioniert,
danke, danke, danke!
Du bist echt weiter zu empfehlen!
Auf ein Andermal
Gruß
Reinhard