Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
340to344
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
340to344
340to344
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Kombobox füllen ohne doppelte Werte

Kombobox füllen ohne doppelte Werte
24.11.2003 15:11:26
Franz W.
Hallo Forum,

ich habe zwei Spalten nebeneinander : "PLZ" - "Ort".

Alle gefüllten Spalten sind zu einem Bereich zusammengefasst mit dem Namen "PlzOrt".

Diesen Bereich lese ich zweispaltig in einer UF in eine Kombobox ein mit folgendem Code:


Private Sub UserForm_Activate()
Dim varArrayNeu As Variant
varArrayNeu = Range("PlzOrt")
cmbNeuPLZ.List = varArrayNeu
End Sub


Es gibt aber zwei Schönheitsfehler:

1. Es kommen die gleichen Postleitzahlen öfters vor. Also ist Liste ellenlang mit sich immer wiederholenden Einträgen!

2. Sie sind nicht sortiert (die gesamte Tabelle ist nach anderen Kriterien sortiert und kann deshalb nicht umsortiert werden.)

Wie kann ich nun die Postleitzahlen und die dazugehörigen Orte so einlesen, dass jede PLZ nur 1 Mal in der Kombo steht? Und das, wenn irgend wie möglich auch noch nach PLZ aufsteigend sortiert? Und nach wie vor zweispaltig? Ist das machbar?

Vielen Dank schon mal für Eure Unterstützung!

Grüße
Franz

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kombobox füllen ohne doppelte Werte
24.11.2003 15:32:10
Michael Scheffler
Hi,

schau mal ins Netz, das gibt da Codes fürs Sortieren.

Gruß

Micha
Wichtiger wäre das Füllen ohne doppelte..
24.11.2003 15:35:18
Franz W.
Hallo Michael,

vielen Dank, werd ich schon was finden. Aber wichtiger wäre mir die Sache mit dem Auschließen von doppelten Werten beim Einlesen der Liste.

Grüße
Franz
AW: Wichtiger wäre das Füllen ohne doppelte..
24.11.2003 15:45:12
Michael Scheffler
Hi,

kleiner Tipp, wenn Du das als Collection behandelst, kannst Du, wenn Du die Add-Methode verwendest, mit dem Key einen Fehler erzeugen. Das kannst Du nach dem Sortieren machen. Damit kannst Du Doppelte aus de Liste löschen.

Gruß

Micha
AW: Wichtiger wäre das Füllen ohne doppelte..
24.11.2003 15:50:40
Franz W.
Hallo Michael,

ja, auf das mit Collection bin ich auch gerade gestoßen, da versuch ich mich grade dran. Vielen Dank für Deine Tipps

Grüße
Franz
Anzeige
AW: Kombobox füllen ohne doppelte Werte
24.11.2003 15:47:44
Nepumuk
Hallo Franz,
je weiter du kommst, desto haarigre wird die Sachen. Außerdem entwickelst du dich zum Dauerbrenner in diesem Forum. Hier mein Lösungsvorschlag:


Option Explicit
Private Sub UserForm_Activate()
Dim varArrayNeu As Variant, strArray() As String, lngIndex As Long
Dim lngZaehler As Long, strMerker As String
varArrayNeu = Range("PlzOrt")
Call sortieren(LBound(varArrayNeu), UBound(varArrayNeu), varArrayNeu)
For lngIndex = LBound(varArrayNeu) To UBound(varArrayNeu)
If strMerker <> varArrayNeu(lngIndex, 1) Then
lngZaehler = lngZaehler + 1
strMerker = varArrayNeu(lngIndex, 1)
End If
Next
ReDim strArray(1 To lngZaehler, 1 To 2)
lngZaehler = 0
For lngIndex = LBound(varArrayNeu) To UBound(varArrayNeu)
If strMerker <> varArrayNeu(lngIndex, 1) Then
lngZaehler = lngZaehler + 1
strArray(lngZaehler, 1) = varArrayNeu(lngIndex, 1)
strArray(lngZaehler, 2) = varArrayNeu(lngIndex, 2)
strMerker = varArrayNeu(lngIndex, 1)
End If
Next
cmbNeuPLZ.List = CVar(strArray)
End Sub
Private Sub sortieren(Untergrenze As Long, Obergrenze As Long, varArray As Variant)
Dim intIndex1 As Long, intIndex2 As Long, Element1 As Variant, Element2 As Variant, Zwischenspeicher As Variant
intIndex1 = Untergrenze
intIndex2 = Obergrenze
Zwischenspeicher = varArray(((Untergrenze + Obergrenze) / 2) \ 1, 1)
Do
Do While varArray(intIndex1, 1) < Zwischenspeicher
intIndex1 = intIndex1 + 1
Loop
Do While Zwischenspeicher < varArray(intIndex2, 1)
intIndex2 = intIndex2 - 1
Loop
If intIndex1 <= intIndex2 Then
Element1 = varArray(intIndex1, 1)
Element2 = varArray(intIndex1, 2)
varArray(intIndex1, 1) = varArray(intIndex2, 1)
varArray(intIndex1, 2) = varArray(intIndex2, 2)
varArray(intIndex2, 1) = Element1
varArray(intIndex2, 2) = Element2
intIndex1 = intIndex1 + 1
intIndex2 = intIndex2 - 1
End If
Loop Until intIndex1 > intIndex2
If Untergrenze < intIndex2 Then Call sortieren(Untergrenze, intIndex2, varArray)
If intIndex1 < Obergrenze Then Call sortieren(intIndex1, Obergrenze, varArray)
End Sub



Code eingefügt mit: Excel Code Jeanie

Ich hoffe du wohnst in der nähe von Nürnberg, jetzt sind langsam ein paar Biere fällig.
Gruß
Nepumuk
Anzeige
Tut mir leid!!
24.11.2003 15:59:07
Franz W.
Hallo Nepumuk,

tut mir leid, wenn ich das Forum mit meinen Fragen zu sehr belaste, daran hab ich erhlich gesagt nicht gedacht. Dachte einfach, Fragen sind Fragen, und von wem sie kommen wäre egal. Und es sollte nicht der Eindruck entstehen, dass ich die Hilfe, die ich hier bekomme, nicht schätzen würde. Ich freue mich sehr über jede Hilfe, jeden Tipp, Code oder Ansatz und betrachte Eure Hilfe nicht als selbstverständlich. Und natürlich gilt auch: keiner muss mir antworten, ich wäre niemandem gram, wenn ihm die Beantwortung einer meiner Fragen zu aufwendig ist. Gut, werd ich mich zurückhalten.

Vielen Dank für Deine Lösungsvorschläge, werde versuchen sie zu integrieren, gebe Dir dann wieder Bescheid. Und auf jeden Fall auch herzlichen Dank für Deine tolle und kompetente Hilfe, die ich schon von Dir bekommen habe!!

In jedem Fall
Anzeige
AW: Tut mir leid!!
24.11.2003 16:04:11
Nepumuk
Hallo Franz,
war nicht so gemeint, natürlich darfst du so viel Fragen stellen wie du benötigst und wenn du etwas dabei lernst, dann hoffe ich dich bald im Kreis der Antworter wieder zu finden.
Gruß
Nepumuk
Ein paar kleinere Fragen, die meinem Können ...
24.11.2003 16:38:26
Franz W.
... entsprechen, hab ich ja auch ab und zu schon mal beantwortet (wenn nicht kompetentere Antworter schneller waren als ich ;-)). Und der Reaktion nach, die Frager wohl auch zufrieden gestellt. Ich bemüh mich ja...

Hallo Nepumuk,

vielen Dank für Deine Codes, die sind ja gewaltig. Du gestattest, dass ich die erst mal übernommen habe, ohne sie so ganz zu verstehen, da ist doch zu viel Neues drin, da brauch ich ein bissl dafür. Und ich bin auch überglücklich damit.

Ganz hunderprozentig haut das Einlesen (manche sind noch doppelt) und die Sortierung nicht hin. Brauchst es aber meinetwegen nicht ändern, mir ist das mehr als gut genug so. Nur wenn es Dich selber reizt, und dafür schildere ich, was passiert:

Es handelt sich um unten stehende Tabelle (ein paar sind nur Testzahlen):

In der Box listet er auf:

11111
22222
44444
55555
81477
81479
01127 doppelt
01127 doppelt
33333
79312
80636
80637
80689
80796
81369
81373
81475
81477
81479 doppelt
81479 doppelt
81677
81929
82152
82166
85521
85540
88888

Ganz herzlichen Dank und beste Grüße
Franz

Anzeige
AW: Ein paar kleinere Fragen, die meinem Können ...
24.11.2003 17:42:05
Nepumuk
Hallo Franz,
ich versteh es nicht, ich habe jetzt deine Testdaten bis zur Zeile 63900 herunterkopiert. Wenn da nicht viele doppelt sind. Aber das Ergebnis ist das selbe wie mit dem einfache Datensatz. Die Sortierroutine und das Ausschlussverfahren habe ich schon oft angewendet und es gab nie Probleme. Du könntest die Spalte mit den Postleitzahlen markieren, dann Menü Bearbeiten - Löschen - Formate. Anschließend die Spalte neu Formatieren - Benutzerdefiniert Format 00000 und dann noch mal versuchen. Des gibds ja garned, Saggezement. Wie ich als Wasserburger sagen würde.
Gruß
Nepumuk
Anzeige
Wos sagst nacha dazua?
24.11.2003 18:11:28
Franz W.
Hallo Nepumuk,

hab alles gemacht, wie Du gesagt hast mit der Formatierung: das Ergebnis in der Combobox ist unverändert, die Tabelle allerdings schaut jetzt so aus:

Wird mit Excel_Jeannie leider nicht richtig dargestellt, darum hab ich die Tabelle wieder rausgelöscht. In meiner Tabelle sind die meisten Zahlen linksbündig am linken Zellenrand, einige aber rechtsbündig angeordnet.

Rechtsbündig sind: 88888, 11111, 22222, 444444, 555555, 81477 und 3 Mal 81479.

Und zwar ist das so, egal ob ich sie alle als Standard formatiere, als Zahl ohne Nachkommastellen, als Sonderformat "Postleitzahl", Benutzerdefiniert "00000". Nur als Text formatiert stehen sie alle linksbündig. Aber egal mit welcher Formatierung, die Ausgabe in der Combobox ist immer diesselbe.

Grüße aus München
Franz
Anzeige
Kleiner Schritt näher...
24.11.2003 19:31:58
Franz W
Hallo Nepumuk,

bin irgendwas auf der Spur, hängt offensichtlich davon ab, ob die Zahlen per Hand oder per Makro eingetragen wurden. Melde mich wieder

Grüße
Franz
AW: Kleiner Schritt näher...
24.11.2003 19:36:36
Nepumuk
Hallo Franz,
lass mal folgendes Programm über die Spalte mit den Postleitzhalen laufen. Die Splate musst du noch anpassen.


Option Explicit
Public Sub Franz()
Dim lngZeile As Long
For lngZeile = 1 To Cells(65536, 4).End(xlUp).Row
If Cells(lngZeile, 4) <> "" Then
If IsNumeric(Cells(lngZeile, 4)) Then Cells(lngZeile, 4) = Cells(lngZeile, 4) * 1
End If
Next
End Sub



Code eingefügt mit: Excel Code Jeanie

Gruß
Nepumuk
Anzeige
Bin grad am Verzweifeln ...
24.11.2003 20:55:15
Franz W.
Hallo Nepumuk,

... und bin kurz vorm Aufgeben!! Hab mir jetzt mit meiner Rumprobierei irgendwas verhauen, und krieg den Fehler 9: " Index außerhalb des gültigen Bereiches " in Deinem Code bei der Zeile:

strArray(lngZaehler, 1) = varArrayNeu(lngIndex, 1)

Und leider hab ich Deinen Code noch nicht richtig durchschaut, dass ich rausfinden würde, woran das liegt.

lngZaehler = 20
lngIndex = 71
varArrayNeu = "81479"
und bei strArray zeigt er "Index außerhalb des gültigen Bereiches"

Weiß mir grad keinen Rat mehr :-(((((

Grüße
Franz
Anzeige
AW: Bin grad am Verzweifeln ...
24.11.2003 22:01:40
Nepumuk
Hallo Franz,
ich versuche das ganze mal zu erklären. Der Teil, des Einlesens des Bereiches ist klar. Beim Sortieren kann eigentlich auch nichts schief gehen und es würde auch zu lange dauern. Dann wird das Variantarray durchlaufen und bei jeder Wertänderung ein Zähler hochgesetzt. Die Anzahl der ermittelten unterschiedlichen Datensätze dient dazu, das Stringarray richtig zu dimensionieren. Dann wird das Variantarray nochmals durchlaufen und nach dem selben Muster wie vorher die Werte eingetragen. Um den Fehler zu produzieren, muss also zwischen den erste Schleifendurchlauf und dem zweiten eine Änderung eingetreten sein. Meine Vermutung, wie der Ami so schön sagt, "The problem is between the keybord and chair!". Also, lass mich den von dir modifizierten Code sehen, dann schau ma weida.
Gruß
Nepumuk
Anzeige
Oh! Hat sich überschnitten
24.11.2003 22:06:11
Franz W.
hab Dir grad geschrieben
AW: Bin grad am Verzweifeln ...
24.11.2003 22:24:32
Franz W.
Hallo Nepumuk,

weiß jetzt, wann der Fehler auftritt: ich habe in der gesamten Liste 5 Einträge OHNE PLZ. Und die haben den Fehler ausgelöst. Ich habe bei denen unter PLZ jetzt per Makro "" eingetragen, und jetzt gehts, jetzt kommt der Fehler nicht mehr. Auch hier wohl der Unterschied zwischen Eintragung per Hand und Eintragung per Makro.

Sagt Dir das was? Kannst Du damit was anfangen? Nachdem die Datei jetzt steht und Neueinträge nur per Makro hinzugefügt werden, dürfte eigentlich nichts mehr passieren. Ließe sich dieser Fehler aber evtl. irgendwie abfangen (die Datei wird ja normalerweise nicht von mir bedient, sondern von meinem Freund)?

ABER BITTE: nur wenn Du noch Lust hast und wenn es nicht zu viel Aufwand ist. Sonst ist es das nicht wert!!!

Beste Grüße
Franz
Hab's wieder...........
24.11.2003 22:04:54
Franz W
Hallo Nepumuk,

hab's wieder, gottseidank! Hab glücklicherweise zwischendurch mal gesichert und hab jetzt die letzte Version noch mal neu aufgebaut. Schwein gehabt.

Ich glaub, ich brauch Dich nicht weiter zu belästigen. Dein Makro oben macht aus allen Werten in der Spalte eine Zahl, richtig? Brauche es aber als Text, weil bei einem Neueintrag durch das Makro die PLZ auch als Text eingetragen wird. Da das Formatieren als Text nicht ausreicht, gehe ich jetzt alle Einträge durch und schreibe die PLZ per Makro rein, und dann müsste es ja klappen. Das krieg ich schon alleine hin ;-))

Ganz vielen Dank auf jeden Fall für Deine Hilfe, ohne Dich hätt ich das nicth hingekriegt. Und ich versprech Dir auch, mir Deine Makros solange anzuschauen, bis ich sie kapiert habe :-)))

Noch mal vielen Dank und beste Grüße
Franz

318 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige