Registriert seit: 25.09.2014
Version(en): 2010-2013
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?
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 13.04.2014
Version(en): 365
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.
Registriert seit: 29.09.2015
Version(en): 2030,5
Code: If InStr(1,Feld(i, 1), tmp1,1) * InStr(1,Feld(i, 1), tmp2,1) > 0 Then
Registriert seit: 25.09.2014
Version(en): 2010-2013
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.
Registriert seit: 13.04.2014
Version(en): 365
18.12.2016, 18:43
(Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2016, 18:43 von BoskoBiati.)
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.
Registriert seit: 25.09.2014
Version(en): 2010-2013
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.
Registriert seit: 13.04.2014
Version(en): 365
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.
Registriert seit: 25.09.2014
Version(en): 2010-2013
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!
Registriert seit: 13.04.2014
Version(en): 365
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.
|