Du weist WertB ja garkeinen Wert zu... außerdem musst du im Elseif Teil eine weitere Variable hochzählen (z.B. i) und dann z.B Worksheets("Statistik").Cells(2+i, 2).Value = Cells(t, 27).Value schreiben. Ansonsten wird die Ausgabezeile immer wieder überschrieben.
Das .Activate kannst du dir sparen und stattdessen Sheets(1).Cells(t,16).value schreiben, das ist wesentlich schneller. Außerdem würde ich den Worksheet nicht per Name (Statistik) sondern per Index ansprechen. Ist ebenfalls deutlich schneller. Merkt man aber alles erst bei größeren Datenmengen. Hier bietet sich außerdem eine With Anweisung an. Spart Tipparbeit und lässt sich schneller ausführen. Am besten ist es allerdings eh mit Arrays zu arbeiten, grade wenn man ganze Tabellenbläter durchsucht.
Sub TabellenVergleichen()
'dim
Dim tab1, tab2, res$(), r&, t&
Dim AnzZeilen&
Dim WertA#, WertB#
'set
AnzZeilen = 100
With Sheets(1)
tab1 = .Range(.Cells(1, 1), .Cells(AnzZeilen, 39)).Value
End With
ReDim res(AnzZeilen - 3, 5)
WertB = 10
'vergleichen
For t = 3 To AnzZeilen
WertA = tab1(t, 16)
If WertA < WertB Then
res(r, 2) = tab1(t, 27)
res(r, 3) = tab1(t, 11)
res(r, 4) = tab1(t, 39)
res(r, 5) = tab1(t, 1)
r = r + 1
End If
Next
'ergebnisse eintragen
With Worksheets("Statistik")
.Range(.Cells(2, 2), .Cells(2 + UBound(res), 2 + UBound(res, 2))).Value = res
End With
End Sub
So könnte es klappen, musst natürlich noch die richtigen Werte zuweisen. Das mit den Array Zuweisungen wirkt vielleicht etwas verwirrend aber eigentlich ist es einfacher, da du weniger schreiben musst und nicht in Gefahr läufst z.B den falschen Sheet anzusprechen.
|