Reichweite einer Schleife erhöhen
#1
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?
Top
#2
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#3
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!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#4
Code:
If InStr(1,Feld(i, 1), tmp1,1) * InStr(1,Feld(i, 1), tmp2,1) > 0 Then
Top
#5
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.
Top
#6
Hallo,

und was steht in der Zeile 417186?????
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#7
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.
Top
#8
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?????
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#9
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!
Top
#10
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!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste