Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
764to768
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
764to768
764to768
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Schleifen optimieren!

Schleifen optimieren!
17.05.2006 17:26:00
Swen
Hallo an alle,
ich habe bisher immer meine ComboBoxen wie folgt mit Daten gefüllt,
For intzaehler2 = 2 To 150
If Worksheets("PCB").Cells(intzaehler2, 1).Value "" Then
UF_Main_PCB_Bea.ComboBox1.AddItem Worksheets("PCB").Cells(intzaehler2, 1).Value
End If
Next intzaehler2
so habe ich aber viele Schleifen in verwendung und ich habe gehört das
das nutzen von schleifen Zeit kostet und somit das Programm langsamer macht.
Gibt es da auch eine andere Möglichkeit dieses mit einer Such Funktion zu machen!
Gruß
Swen

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

Betreff
Datum
Anwender
Anzeige
AW: Schleifen optimieren!
17.05.2006 21:16:20
Erich
Hallo Swen,
wenn fast keine der durchsuchten Zellen leer sind, ist deine Schleife wohl nicht langsamer als die Find-Alternative. Je weniger Zellen gefüllt sind, umso schneller geht es mit dem Find.
So ginge es mit Find:
Sub FillCB()
Dim rngGef As Range, lngErst As Long
With Range(Worksheets("PCB").Cells(2, 1), Worksheets("PCB").Cells(150, 1))
Set rngGef = .Find(What:="*", _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not rngGef Is Nothing Then
lngErst = rngGef.Row
Do
UF_Main_PCB_Bea.ComboBox1.AddItem rngGef.Value
Set rngGef = .FindNext(rngGef)
Loop While Not rngGef Is Nothing And rngGef.Row <= lngErst
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Schleifen optimieren!
17.05.2006 21:50:03
Swen
Hallo Erich,
ich habe noch eine Frage wie würde es ausehen wenn ich in der Spalte 1 Von Zeile 1 bis 150 den Wert "Swen" suchen würde.
Und dann ind die Varible "intZeile" den wert der ermittelten Zeile schreiben möchte?
Gruß
Swen
AW: Schleifen optimieren!
17.05.2006 22:55:30
Erich
Hallo Swen,
zu Frage 1:
cells(2,1) ändern in cells(1,1)
zu Frage2:
Was willst du mit der neuen Variablen machen? Sie ändert sich von Fundstelle zu Fundstelle, innerhalb der Do-Schleife. Ich hab die Variable lngZeile genannt, da Zeilen (wenn auch wegen "bis Zeile 150" nicht in diesem Fall) die Integer-Grenze überschreiten können.
Sub fFind()
Dim rngGef As Range, lngErst As Long, zz As Long, lngZeile As Long
With Range(Worksheets("PCB").Cells(1, 1), Worksheets("PCB").Cells(150, 1))
Columns(4).ClearContents
Set rngGef = .Find(What:="Swen", _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not rngGef Is Nothing Then
lngErst = rngGef.Row
Do
lngZeile = rngGef.Row                       ' wofür auch immer
UF_Main_PCB_Bea.ComboBox1.AddItem rngGef.Value
Set rngGef = .FindNext(rngGef)
Loop While Not rngGef Is Nothing And rngGef.Row <> lngErst
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Schleifen optimieren!
17.05.2006 23:32:35
Swen
Hallo Erich,
ich möchte folgende Schleife eigentlich mit find erstellen
For intzaehler2 = 2 To 150
If Worksheets("PCB").Cells(intzaehler2, 1).Value = _
UF_Main_PCB_Bea.ComboBox1.Value Then
Exit For
End If
Next intzaehler2
intZeile = intzaehler2
in der Zeile 1 steht eine Überschrift die nicht beachtet werden soll!
Gruß
Swen
AW: Schleifen optimieren!
17.05.2006 23:49:31
Erich
Hi Swen,
ach so, das ginge so (liefert die Zeilennummer des ersten Treffers bzw. 0 bei "not found"):
Sub Find_Wert()
Dim strSuch As String, rngGef As Range, lngZeile As Long
strSuch = UF_Main_PCB_Bea.ComboBox1.Value
With Range(Worksheets("Tabelle2").Cells(1, 1), Worksheets("Tabelle2").Cells(150, 1))
Set rngGef = .Find(What:=strSuch, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False)
If Not rngGef Is Nothing Then lngZeile = rngGef.Row
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Schleifen optimieren!
17.05.2006 23:53:02
Swen
Hallo Erich,
jetzt noch eine Frage, wann würdest du find benutzten und wann würdest du
eine For Next Schleife benutzen
gruß
swen
AW: Schleifen optimieren!
18.05.2006 00:03:47
Erich
Hi Swen,
für das Füllen der UF-Combobox hatte ich dir in meiner 1. Antwort geschrieben:

wenn fast keine der durchsuchten Zellen leer sind, ist deine Schleife
wohl nicht langsamer als die Find-Alternative. Je weniger Zellen gefüllt sind,
umso schneller geht es mit dem Find.
Wenn es nur darum geht, das erste Auftreten eines Wertes in einer Spalte zu finden,
ist Find sicher einer For-Schleife vorzuziehen.
Nebenbei: Aus Cells(1, 1) solltest du wieder Cells(2, 1) machen - jetzt soll ja doch ab Zeile 2 gesucht werden.
Gute Nacht und Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Schleifen optimieren!
17.05.2006 23:04:59
Daniel
Hallo
wenns nur darum geht, die Leerzellen auszublenden, gäbs auch folgende Möglichkeit:
Dim Zelle as Range
For each Zelle in Sheets("PCB").Range("A2:A150").SpecialCells(xlCellTypeConstants, 3)
UF_Main_PCB_Bea.ComboBox1.AddItem Zelle.value
Next
Voraussetzung ist allerding, das alle deine Werte Konstant-Werte sind, also keine Formeln.
Wenns nur Formeln sind, gehts auch, dann mußt du allerding dim Code den
- "xlCellTyeConstants" durch "xlCellTypeFormulas" ersetzen
Wenns Formeln und Konstanten gemischt sind, gehts mit dieser Methode leider nicht.
Denn Effekt kannst du ausprobieren bzw aufzeichnen über:
- Bearbeiten - Gehe zu - Inhalte - Konstanten bzw Formeln
Gruß, Daniel Eisert
Anzeige
AW: Schleifen optimieren!
18.05.2006 01:36:29
Swen
Hallo Daniel,
ich habe es umgewandelt
die variable intSpalte wir düber eine ander
funktion ermittel in diesem Fall ist intSpalte=3
For Each rngZelle In Sheets("Appli").Range(Cells(2, intSpalte), Cells(150, intSpalte)).SpecialCells(xlCellTypeConstants, 3)
UF_Header.ComboBox9.AddItem rngZelle.Value
Next
aber es klappt nicht mehr.
gruß
swen
AW: Schleifen optimieren!
18.05.2006 20:49:39
Daniel
Hi
so gehts nicht:
Sheets("Appli").Range(Cells(2, intSpalte), Cells(150, intSpalte))
so gehts:
Range(Sheets("Appli").Cells(2, intSpalte), Sheets("Appli").Cells(150, intSpalte))
Wenn du einen Range-Bereich über 2 Zellen definierst, steht das Sheet-Objekt nicht vor dem Range-Objekt, sondern innerhalb des Range-Objekt, jeweils vor beiden Cells-Objekten.
Ist zwar nicht unbedingt logisch weil ein Range-Objekt ja nur innerhalb eines sheets vorkommen kann, aber es ist halt so.
Warum? keine Ahnung
Gruß, Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige