Volker Neurath
2022-10-07 17:27:53 UTC
Hi zusammen,
neues Problem:
Ich wollte gestern die Zellen einer Spalte (ca 12700 Zeilen)
darauf hin überprüfen, ob sie Werte <0 enthalten.
Bei <0 soll eine 0 in die Zelle geschrieben werden.
Mein Ansatz (geklaut bei John Walkenbach):
die Spalte in ein Variant-Array einlesen, das mittels einer FOR...NEXT
Schleife durchlaufen wird. Innerhalb der Schleife erfolgen Test und ggf.
Rückschreiben der 0 in das entsprechende Array-Element.
Wenn fertig, "einfach" das Variant-Array zurück in den Spalten-Range
schreiben.
Habe ich schon unzählige male so gemacht, hat immer funktioniert.
Soweit die Theorie.
Heute wollte Excel jedoch nicht mitspielen.
Hier der Code:
Option Explicit
Option Base 1
Sub AlleNegativenNull()
Dim TR As Variant
Dim i As Long
TR = Range("B1:B84").Value
'die Debug.Print Zeilen sind noch von meinen Versuchen
'einer Fehlersuche übrig
'Erstmal nur 84 Zeilen
For i = 1 To 84
Debug.Print i
Debug.Print TR(i)
If TR(i) < 0 Then
TR(i) = 0
End If
Next i
Range("B1:B84").Value = TR
End Sub
Schon an der zweiten Debug.Print bricht die Ausführung des Codes mit
der Meldung ab, ein Parameter sei außerhalb des gültigen Wertebereiches
- damit kann ja eigentlich nur die Laufvariable i gemeint sein, so dass
TR(i) scheitert. Aber: warum?
Heute habe ich es mit einer anderen Codevariante nochmal getestet:
Sub AlleNegativenNull()
Dim TR As Variant
Dim i As Long
TR = Range("A1:B84").Value
'die Debug.Print Zeilen sind noch von meinen Versuchen
'einer Fehlersuche übrig
'Erstmal nur 84 Zeilen
For i = 1 To UBound(TR,1)
If TR(i,2) < 0 Then
TR(i,2) = 0
End If
Next i
Range("B1:B84").Value = TR
End Sub
Und oh wunder: geht.
kann mir bitte mal jemand auf die Sprünge helfen und erklären, warum
der zweite Code funktioniert, der erste nicht?
neues Problem:
Ich wollte gestern die Zellen einer Spalte (ca 12700 Zeilen)
darauf hin überprüfen, ob sie Werte <0 enthalten.
Bei <0 soll eine 0 in die Zelle geschrieben werden.
Mein Ansatz (geklaut bei John Walkenbach):
die Spalte in ein Variant-Array einlesen, das mittels einer FOR...NEXT
Schleife durchlaufen wird. Innerhalb der Schleife erfolgen Test und ggf.
Rückschreiben der 0 in das entsprechende Array-Element.
Wenn fertig, "einfach" das Variant-Array zurück in den Spalten-Range
schreiben.
Habe ich schon unzählige male so gemacht, hat immer funktioniert.
Soweit die Theorie.
Heute wollte Excel jedoch nicht mitspielen.
Hier der Code:
Option Explicit
Option Base 1
Sub AlleNegativenNull()
Dim TR As Variant
Dim i As Long
TR = Range("B1:B84").Value
'die Debug.Print Zeilen sind noch von meinen Versuchen
'einer Fehlersuche übrig
'Erstmal nur 84 Zeilen
For i = 1 To 84
Debug.Print i
Debug.Print TR(i)
If TR(i) < 0 Then
TR(i) = 0
End If
Next i
Range("B1:B84").Value = TR
End Sub
Schon an der zweiten Debug.Print bricht die Ausführung des Codes mit
der Meldung ab, ein Parameter sei außerhalb des gültigen Wertebereiches
- damit kann ja eigentlich nur die Laufvariable i gemeint sein, so dass
TR(i) scheitert. Aber: warum?
Heute habe ich es mit einer anderen Codevariante nochmal getestet:
Sub AlleNegativenNull()
Dim TR As Variant
Dim i As Long
TR = Range("A1:B84").Value
'die Debug.Print Zeilen sind noch von meinen Versuchen
'einer Fehlersuche übrig
'Erstmal nur 84 Zeilen
For i = 1 To UBound(TR,1)
If TR(i,2) < 0 Then
TR(i,2) = 0
End If
Next i
Range("B1:B84").Value = TR
End Sub
Und oh wunder: geht.
kann mir bitte mal jemand auf die Sprünge helfen und erklären, warum
der zweite Code funktioniert, der erste nicht?