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

Schleifen

Schleifen
Michael
Hallo Miteinander!
Ich muss ein Datenbestand über etwa 100 Nummern in der Registry speichern. Bei Updates sollen die wieder ausgelesen werden. Die Nummern sind zehnstellig. Das dauert also mit einer For-Next-Schleife ziemlich lange. Wie könnte ich das nun eleganter und schneller machen. Beispiel also
For I = 10000 To 9999999
Application.StatusBar = "Daten einlesen: " & I & " / 9999999 Datensätze"
strAbfrage = ""
strAbfrage = GetSetting( _
appname:="test", _
section:="Daten", _
key:=I)
If strAbfrage "" Then
Sheets("ZK").Cells(Sheets("ZK").Range("F1") + 2, 5) = strAbfrage
Sheets("ZK").Cells(Sheets("ZK").Range("F1") + 2, 4) = I
End If
Next I
Vielen Dank für Eure Hilfe
Michael Heering

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

Betreff
Benutzer
Anzeige
AW: Schleifen
Ramses
Hallo
Tut mir leid, aber ich versteh nicht warum du eine Schleife über 9'999'999 !!! laufen lässt ?
Es reicht doch eine Schleife von 1 - 100. Es ist doch egal was hinter dem Key für eine Zahl steht. Die Zahlenlänge hat doch mit der Schleife nichts zu tun, und der Wert in der Zielzelle wird ja immer wieder überschrieben.
Gruss Rainer
AW: Schleifen
Michael
Hallo Rainer!
Ich habe da bestimmt ein Verständnisproblem. Sieh mal, meine Daten in der Registry sehen etwa so aus:
"110132"="BR"
"160069"="BR"
"110161"="AZ"
"111236"="BS"
"171073"="CX"
"172312"="DN"
"172510"="EB"
"110022"="EP"
"110086"="FH"
"110166"="FW"
"110303"="GN"
Da reicht kein 1 bis 100 um die auszulesen. Die höchste Nummer ist wie gesagt 10stellig. Daher lasse ich eine Schleife von 10000 bis 10stellig durchlaufen. Ist der Key also gleich I habe ich meine Datensatznummer und den dazugehörigen Schlüssel als strAbfrage. Nur das dauert ewig. Ich komme auf keine Lösung das abzukürzen.
Grüße Michael
Anzeige
AW: Schleifen
Uwe
Hallo, Michael!
Wenn Dich nur der Datensatz interessiert, wo I = Key ist, dann lasse Dir nur in diesem Fall das Ergebnis anzeigen, ansonten überspringe die Ausgabe.
Deine Verlaufsausgaben sind sind eben die Bremsen. Wenn diese unvermeidbar sind, dann solltest Du vermeiden, jedes Mal aufs Neue die Zellenadressen zu berechnen; lege diese zuvor als Variablienwert fest, bevor Du die Schleife eröffnest.
Auch die "Bremswirkung" der Statusanzeige kann verhindert werden, wenn Du nur den Fortschritt nach jeweils 1000 durchgeführter Schritte aktualisiert:
Dim I As Long, strAbfrage As String, r As Integer
Dim ws As Worksheet
Set ws = Worksheets("ZK")
r = Range("F1").Row + 2
With ws
For I = 10000 To 9999999
If I Mod 1000 = 0 Then
Application.StatusBar = "Daten einlesen: " & I & " / 9999999 Datensätze"
End If
If Gefunden = True Then
.Cells(r, 5) = strAbfrage
.Cells(r, 4) = I
End If
Next I
...

Gruß!
Anzeige
AW: Schleifen
Michael
Hallo Uwe!
Das hat mir schon ordentlich von der Zeit her geholfen. Dauert aber immer noch ewig. Ist es nicht möglich, mittels einer for each-Schleife diese nur knappt hundert Zahlen schneller auszulesen?
Danke Michael
AW: Schleifen
Bert
Sieh dir mal GetAllSettings an.
Bert
AW: Schleifen
Ramses
Hallo
Aber warum dann nur knapp 10 Millionen mal ?
10 stellig würde ja bedeuten 1 Milliarde mal ;-) ?
Was ich immer noch nicht verstehe, du schreibst den Wert ja immer in die gleiche Zelle ?
"...Sheets("ZK").Cells(Sheets("ZK").Range("F1") + 2, 5) = strAbfrage..."
Anyway:
Hier ein Auszug aus der Online-Hilfe
Für deinen Bedarf müsste sich die Funktion "GetAllSettings" eignen.
Ich weiss nicht wie deine Section aufgebaut ist, sollte aber tun nach ein bischen anpassen ;-))
Für deinen Bedarf würde sich aber ein 3-Dimensionales Datenfeld anbieten
GetAllSettings-Funktion (Beispiel)
In diesem Beispiel wird zunächst die SaveSetting-Anweisung verwendet, um Einträge in der Windows-Registrierung (oder in der .INI-Datei auf 16-Bit Windows-Plattformen) für die als appname angegebene Anwendung vorzunehmen. Anschließend wird die GetAllSettings-Funktion verwendet, um die Einstellungen anzuzeigen. Namen von Anwendungen und Abschnitten (section) können mit GetAllSettings nicht abgerufen werden. Abschließend entfernt die DeleteSetting-Anweisung alle Einträge der Anwendung.

Sub Read_All_Settings()
' Variant für zweidimensionales Datenfeld, das von GetAllSettings
' zurückgegeben wird.
' Ganzzahl für den Zähler.
Dim Einstellungen As Variant, intSettings As Integer
' Einträge in der Registrierung vornehmen.
SaveSetting appname := "Anw1", section := "Startup", _
key := "Top", setting := 75
SaveSetting "Anw1","Startup", "Left", 50
' Einstellungen abrufen.
Einstellungen = GetAllSettings(appname := "Anw1", section := "Startup")
For intSettings = LBound(Einstellungen, 1) To UBound(Einstellungen, 1)
Debug.Print Einstellungen(intSettings, 0), Einstellungen(intSettings, 1)    Next intSettings
End Sub

Gruss Rainer
Anzeige
Sorry, der Beitrag sollte zu Michael :-) o.T.
Ramses
...
AW: Schleifen
03.04.2004 22:05:43
Michael
Das werde ich versuchen.
Vielen Dank an Euch alle.
Michael
GetAllSettings
04.04.2004 13:31:01
Michael
DAS ISSES!
Vielen lieben Dank an Euch. Das Auslesen dauert jetzt etwa noch 1-2 Sekunden. Den Code habe ich jetzt folgendemaßen entwickelt, um auch das erste datenfeld zu erhalten:

Sub read_all_settings()
Dim Einstellungen As Variant
'AUSLESEN
Einstellungen = GetAllSettings(appname:="HeeroSoft / ifn-Schnittstelle", _
section:="ifnDebitor")
'DAS ERSTE DATENFELD AUSLESEN UND EINTRAGEN
Sheets("test").Range("A1") = Einstellungen
Sheets("test").Cells(1, 1) = Einstellungen(0, 0)
Sheets("test").Cells(1, 2) = Einstellungen(0, 1)
'DIE RESTLICHEN DATENFELDER AUSLESEN UND EINTRAGEN
For I = 1 To UBound(Einstellungen, 1)
Sheets("test").Cells(I + 1, 1) = Einstellungen(I, 0)
Sheets("test").Cells(I + 1, 2) = Einstellungen(I, 1)
Next I
End Sub

Grüße Michael Heering
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige