Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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?
Antworten 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)
Antworten 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.
Antworten Top
#4
Code:
If InStr(1,Feld(i, 1), tmp1,1) * InStr(1,Feld(i, 1), tmp2,1) > 0 Then
Antworten 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.
Antworten 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.
Antworten 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.
Antworten 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.
Antworten 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!
Antworten 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.
Antworten Top


Gehe zu:


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