Hallo! So auf die schnelle würde ich es nur so ändern. HInweis noch, um den Inhalt deines Array zu behalten musst du Redim Preserve nutzen.
Sub Auswertung()
Dim arr As Variant
Dim Objekt_Nr As Variant
Dim Ergebniss(5000) As Variant
Application.ScreenUpdating = False
Worksheets("Tabelle2").Select
LetzteZeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
With Worksheets("Tabelle1")
arr = .Range("P2:P" & .Cells(.Rows.Count, 1).End(xlUp).Row)
End With
For FortlaufendeNummer = 2 To LetzteZeile
Nr = ActiveSheet.Cells(FortlaufendeNummer, 5).Value
k = 0
For i = 2 To UBound(arr)
If CStr(arr(i, 1)) = Nr Then
ZeileNr = i
Ergebniss(k) = Worksheets("Tabelle1").Cells(i, 1)
k = k + 1
If k > 5000 Then ReDim Preserve Ergebniss(k)
End If
Next
If Ergebniss(0) = "" Then
Sheets("Tabelle2").Cells(FortlaufendeNummer, 17) = "Error"
Erase Ergebniss
End If
Erase Ergebniss
Next
Application.ScreenUpdating = True
End Sub
Das Ganze wird aber nichts an der Geschwindigkeit ändern - eher das Gegenteil. Eine Frage noch. Am Ende wird immer Ergebniss gelöscht. Soll das so sein.
Man könnte auch noch andere Methoden nutzen, um die Daten zu speichern. Welche hängt davon ab, ob die Werte für Ergebniss nur einmal vorkommen und was am Ende damit gemacht werden. Würde da bspw. Arraylisten, Dictionaries etc. geben. VG
|