Code sehr langsam trotz starkem PC
13.09.2024 16:22:14
AlSp
Ich habe ein kleines Problem mit einem Code, den ich geschrieben habe. Er soll in verschiedenen Arbeitsblättern nach bestimmten Zeichenfolgen suchen (die sich aus Kürzeln und einem Zusatz (A, B, C und D sind nur Platzhalter der Übersichtbarkeit wegen) ergeben) und die Anzahl der betroffenen Zellen addieren.
Das funktioniert auch wunderbar, allerdings ist der Code sehr langsam (etwa 10 Sekunden, trotz ganz neuer CPU). In der Datei gibt es etwa 50 Blätter, die durchsucht werden müssen.
Ist das so zu erwarten oder ist der Code "schlecht" (oder beides)?
Danke für eure Hilfe.
Viele Grüße
Alexander
Sub Statistik()
Dim ws As Worksheet
Dim cell As Range
Dim countKr As Long
Dim countKi As Long
Dim countFobi As Long
Dim countQuali As Long
Dim searchRange As Range
Dim statistikSheet As Worksheet
Dim searchText As String
Dim i As Long
On Error Resume Next
Set statistikSheet = ThisWorkbook.Worksheets("Statistiken")
On Error GoTo 0
If statistikSheet Is Nothing Then
MsgBox "Das Arbeitsblatt 'Statistiken' existiert nicht.", vbExclamation
Exit Sub
End If
For i = 3 To 74
searchText = statistikSheet.Cells(i, 2).Value
countA = 0
countB = 0
countC = 0
countD = 0
For Each ws In ThisWorkbook.Worksheets
If Left(ws.Name, 2) = "KW" Then
' Setze den zu durchsuchenden Bereich
On Error Resume Next
Set searchRange = ws.Range("A25:E40")
On Error GoTo 0
If Not searchRange Is Nothing Then
For Each cell In searchRange
' Zählen der Vorkommen von ": A"
If InStr(cell.Value, searchText & ": A") > 0 Then
countKr = countA + 1
End If
If InStr(cell.Value, searchText & ": B") > 0 Then
countKi = countB + 1
End If
If InStr(cell.Value, searchText & ": C") > 0 Then
countFobi = countC + 1
End If
If InStr(cell.Value, searchText & ": D") > 0 Then
countQuali = countD + 1
End If
Next cell
End If
Set searchRange = Nothing
End If
Next ws
statistikSheet.Cells(i, 3).Value = countA ' Ergebnis für ": A"
statistikSheet.Cells(i, 4).Value = countB ' Ergebnis für ": B"
statistikSheet.Cells(i, 5).Value = countC ' Ergebnis für ": C"
statistikSheet.Cells(i, 6).Value = countD ' Ergebnis für ": Di"
Next i
' Informiere den Benutzer über den Abschluss
MsgBox "Die Statistik wurde aktualisiert.", vbInformation
End Sub
Anzeige