Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1668to1672
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

Großer Array /Combox

Großer Array /Combox
28.01.2019 00:07:57
Robert
Hallo Forum,
Ich habe schon oft von den hilfreichen Informationen hier durch einfaches Suchen profitiert - jetzt muss ich einmal konkret fragen und hoffe auf eure Unterstützung.
Aufgabenstellung:
Ich habe Daten in einer Tabelle, wobei die Kombination aus PLZ und Ortsname die Schlüssel sind. Die Daten sind für Deutschland und Österreich in jeweils einem Tabellenblatt der selben Arbeitsmappe.Ich brauche die Daten für eine Berechnung in einer Userform in der selben Arbeitsmappe.
In der Userform habe ich unter anderem 3 Comboboxen.
1. Auswahl eines Landes
2. Auswahl einer PLZ
3. Auswahl eines Ortes
Die Länder-Combobox fülle ich beim Initialisieren mit DE, AT, I, CH. Beim Start ist erstmal kein Land ausgewählt.
Wird jetzt die Combobox geändert (speziell auf DE oder AT), wird ein ARRAY entsprechend der Zeilen und Spalten erstellt und mittels Schleife alle Zellen des Tabellenblattesin die Felder des ARRAY geschrieben. Dann werden Combobox 2 und 3 über eine Schleife mit den entsprechenden Einträgen aus dem ARRAY gefüllt.
vereinfacht:
combobox.clear
usedrange.rows.count
redim array...
for i=2 to n
for j=1 to 7
array(i-2,j-1)=.cells(i,j)
next j
combobox2.additem array(i,1)
combobox3.additem array(i,2)
next i
(code nur vereinfacht zur Veranschaulichung - richtig sieht er natürlich etwas komplexer und mit korrekter Syntax aus)
Das sind für DE über 14Tsd. Zeilen á 7 Werte, für AT ein paar weniger.
Das Problem, was ich bis jetzt nicht lösen konnte, ist die Zeit.
Aufgrund der vielen Zeilen dauert es beim Ändern des Landes ca. 20sec, bis der ARRAY und die Comboboxen gefüllt sind.Das ist einfach unschön.
Ziel ist es, dass der User eine PLZ in Combobox2 auswählt/einträgt, Combobox3 springt dann gekoppelt über den Listindex auf den 1. Ort mit der PLZ (aber es haben u.U. mehrere Orte die gleiche PLZ, so dass danach in Combobox3 ggf. der Ort korrigiert wird. Über den Listindex hole ich mir aus der entsprechenden Zeile des ARRAY dann die weiteren Daten und schreibe sie zur Berechnung auf Variablen.
Wie gesagt - programmtechnis funktioniert alles - nur das füllen des ARRAY/der Comboboxen dauert zu lange.
Ich habe schon versucht, 2 ARRAYS bei der Initialisierung der Userform zu füllen und dann nur den Inhalt der Comboboxen beim Umschaltenauszutauschen - aber das hat zeitmäig das Problem auch nicht gelöst.
Zuerst hatte ich die PLZ-Eingabe als Textbox und wolltedann die Combobox3 nur mit den Orten füllen, die die gleiche PLZ haben, aber das war über die Suche im Tabellenblatt ein zeitliches Disaster, da ich ja wegen der mehrfach gleichen PLZ trotzdem durch alle Zeilen laufen musste.
Ich hoffe, einer von Euch hat die zündende Idee zur Lösung.
Vielen Dank schonmal vorab!

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Großer Array /Combox
28.01.2019 00:22:56
onur
Ohne die Datei oder Musterdatei (mit genug Datensätzen) wohl kaum
AW: Großer Array /Combox
28.01.2019 00:33:33
Robert
ich habe gehofft, es gibt vielleicht einfach eine andere Methode- deshalb auch nur die verbale Beschreibung.
Ich werde versuchen, diesen Teil des Codes und die Daten in eine Beispieldatei zu kopieren, aber da der Code insgesamt schon ziehmlich lang und verschachtelt ist, wird das etwas dauern, bis ich ein lauffähiges Fragment erzeugt habe... werde mich aber bemühen.
AW: Großer Array /Combox
28.01.2019 00:34:56
onur
Den Code brauche ich nicht, nur eine Datei mit genug Daten.
AW: Großer Array /Combox
28.01.2019 00:35:45
onur
Und natürlich mit der Userform.
AW: Großer Array /Combox
28.01.2019 02:20:41
Matthias
Moin!
Um den Code schneller zu machen, verzichte auf Zugriffe auf das Tabellenblatt. Packe die ganzen Daten in einem Rutsch in eine Variable und beziehe dich beim Auswerten / Einlesen auf diese Variable. Damit vermeidest du unnötige Zugriffe auf das Blatt - das kostet Zeit. Zudem eine innere Schleife ja auch nur die Daten einliest - das geht auch mit meineVariable = Range("A2:G123") etc.
Und dann lese deine Daten für die Comboboxen ebenfalls in ein Array und übergib das einmal an die Liste der Comboboxen. Das additem jeweils kostet auch Zeit (je nachdem, wie oft es vorkommt). Wobei du da auch gleich den Bereich an die Listeigenschaft geben kannst. Du nimmst ja "nur" die Werte aus Spalte B an die ComboBox2. Da kannst du doch auch die Range("B1:B123") gleich übergeben. Spart dir das Einlesen generell.
VG
Anzeige
AW: Großer Array /Combox
28.01.2019 13:46:49
Robert
Hallo an alle,
Danke für Eure Tips - anscheinend war das "additem" für die Comboboxen der Zeitfresser - ich habe - weil es am einfachsten ging - die Comboboxen mittels Range gefüllt und das Ergebnis ist einwandfrei zufriedenstellend.
Ich gehe für die beiden Comboboxen noch über 2 extra Arrays, weil ich es nicht hinbekommen habe, sie direkt aus dem 7-dimensionalen Array zu befüllen - aber das hat auf die Verarbeitungszeit jetzt keinen negativen Einfluss

Public Sub arrSnowZoneDataFill(strCountry As String)
Dim i, j, k, n, m As Integer
Dim arrCombo14, arrCombo15 As Variant
strPLZ = ComboBox14.Value
Dim intPLZ As Integer
intPLZ = 0
Select Case strCountry
Case "AT"
Set ws = ThisWorkbook.Worksheets("Postleitzahlen_AT")
intPLZ = 4
Case "DE"
Set ws = ThisWorkbook.Worksheets("Postleitzahlen_DE")
intPLZ = 5
Case Else
ComboBox14.Style = fmStyleDropDownCombo
ComboBox15.Style = fmStyleDropDownCombo
Exit Sub
End Select
ComboBox14.Style = fmStyleDropDownList
ComboBox15.Style = fmStyleDropDownList
n = ws.UsedRange.Rows.Count
arrSnowZoneData = ws.Range("A2:J" & (n))
arrCombo14 = ws.Range("A2:A" & (n))
arrCombo15 = ws.Range("J2:J" & (n))
ComboBox14.List = arrCombo14
ComboBox15.List = arrCombo15
ComboBox14.ListIndex = 0
ComboBox15.ListIndex = 0
Set ws = Nothing
End Sub
In diesem Sinne ist es für mich geklärt! Vielen Dank.
Anzeige
AW: Großer Array /Combox
28.01.2019 14:18:17
onur
Offensichtlich hast du meinen Code nicht wirklich kapiert, um ihn umsetzen zu können.
Wenn du aber gerne mit riesigen Arrays und ellenlangen Comboboxen rumhantierst ....
AW: Großer Array /Combox
28.01.2019 18:46:24
Robert
Hallo onur,
Ich habe "Deinen Code nicht kapiert", weil ich keinen gesehen habe. Du hast um Daten und Userform gebeten, weil man sonst nichts machen kann. Ich bin dem Hinweis von Mathias gefolgt.
Die Größe des Array und die Länge der Comboboxen sind nunmal durch die Menge der Daten bestimmt. Aber bitte...
AW: Großer Array /Combox
28.01.2019 18:51:14
onur
OOOPS!
Sorry vielmals, offensichtlich ist beim Upload bzw bei der Antwort was in die Hose gegangen.
Der Vollständigkeit halber - DAS war meine Datei:
https://www.herber.de/bbs/user/127221.xlsm
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige