Clever-Excel-Forum

Normale Version: Reichweite einer Schleife erhöhen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo Houston,

ich hab ein Problem.

Habe mir ein kleines Filterprogramm geschrieben. Das sieht folgendermassen aus:


Code:
Sub Filtereinschalten()
Dim Feld, tmp1 As String, tmp2 As String, i As Double
tmp1 = "Mühe"
tmp2 = "lag"
Feld = Sheets("Tabelle1").Range("C:C")
For i = 1 To 400000 'UBound(Feld)
If InStr(Feld(i, 1), tmp1) And InStr(Feld(i, 1), tmp2) > 0 Then
Debug.Print i
End If
Next
Debug.Print
End Sub
Ich möchte also die Zeilennummer mit der Zelle erhalten, in der sowohl das Wort "Mühe" als auch "lag" drin vorkommt.
Der Code ist Marke einfach wie man sieht, aber  für meine Zwecke völlig ausreichend. Jetzt aber mein Problem.
Bis i = 400000 und ein paar Zerquetschte drüber läuft alles wie geschmiert, nur habe ich in der Spalte C
über 1 Mio Einträge, die der Code durchsuchen soll. Deklariere ich i as long funktioniert gar nichts. i als double
zu deklarieren, ist das Maximale was ich derzeit hinbekomme. Wie erhöhe ich die Reichweite der
Schleife?
Moin!
Du kannst ja max. 2^20 aka 1.048.576 Zellen in der Spalte haben.
Long geht bis 2.147.483.647, reicht also locker aus.


Gruß Ralf
Hallo,

Die If-Bedingung ist falsch!



Code:
If InStr(Feld(i, 1), tmp1)>0 And InStr(Feld(i, 1), tmp2) > 0 Then

wäre richtig! Bei mir läuft das Makro dann anstandslos durch!
Außerdem müssen die Worte genauso geschrieben werden, auch mit Groß-/Kleinschreibung, VBA ist da sehr empfindlich!
Code:
If InStr(1,Feld(i, 1), tmp1,1) * InStr(1,Feld(i, 1), tmp2,1) > 0 Then
Hallo,


zunächst schon mal danke für eure Antworten.  Aber das scheint es nicht zu sein.

Bei i = 417186  wird bei mir die Zeile

If InStr(Feld(i, 1), tmp1) > 0 And InStr(Feld(i, 1), tmp2) > 0 Then

gelb eingefärbt und es erscheint  dann die Fehlermeldung "Typen unverträglich".

Wie gesagt, es geht um eine unglaubliche Menge an Schleifendurchläufen.
Hallo,

und was steht in der Zeile 417186?????
Also hallo nochmal,

So gehts, und zwar mit allen drei IF Bedingungen:

aber...

Code:
Sub Filtereinschalten()
Dim Feld, tmp1 As String, tmp2 As String, i As Double
tmp1 = "Mühe"
tmp2 = "lag"
Feld = Sheets("Tabelle1").Range("C:C")
For i = 1 To 417185 'UBound(Feld)
If InStr(1, Feld(i, 1), tmp1, 1) * InStr(1, Feld(i, 1), tmp2, 1) > 0 Then
'If InStr(Feld(i, 1), tmp1) > 0 And InStr(Feld(i, 1), tmp2) > 0 Then
'If InStr(Feld(i, 1), tmp1) And InStr(Feld(i, 1), tmp2) > 0 Then
Debug.Print i
End If
Next
Debug.Print
End Sub


Sobald aber die Schleife auch nur um eine 1 erhöht wird, also ab i = 417186 erscheint die Fehlermeldung.
Sicherlich man könnte 2 oder 3 Schleifen hintereinander laufen lassen, bis man 1 Million Werte abgeklappert
hat, aber das kanns ja nicht sein.
Hallo,

ich weiß nicht, ob Du es nicht verstehen willst, aber das Makro läuft ordnungsgemäß durch, es sei denn in der Zelle C417186 ist ein Eintrag, der das Makro stört! Also, was steht in dieser Zelle?????
Hallo Edgar,

das wars. Man sollte nicht 2-3 Sachen auf einmal machen. Bin nebenbei noch am telefonieren.
Wenn man also ein
On Error Resume Next
in den Code hineinbringt läufts durch.

So long meine Lieben!
Hallo,

schlechteste aller Lösungen!  In der Zelle muß ein Fehler aus einer Formel stehen (#Wert!, #Div/0 etc.), der das Makro zum Absturz bringt!
Seiten: 1 2 3