Kann man mein Makro beschleunigen?
18.10.2024 17:04:39
Christian
mal eine Frage an euch VBA Experten,
nachfolgendes Makro braucht dank der großen Bereiche ewig und 3 Tage bis es fertig ist. Auch wenn sich die Bereiche nicht verkleinern lassen, hat jemand von euch vielleicht noch eine andere Idee wie man das beschleunigen kann?
Vielen Dank
Christian
Sub Makro1()
Dim ws As Worksheet
Dim rng As Range
Dim data As Variant
Dim i As Long
Dim cellValue As String
Dim ws17 As Worksheet, ws18 As Worksheet, ws19 As Worksheet
Dim rng17 As Range, rng18 As Range, rng19 As Range
Dim foundInSpecialRange As Boolean
' Bildschirmaktualisierung und Berechnung deaktivieren
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' Setze das Arbeitsblatt "alle" und den relevanten Bereich, der bearbeitet wird
Set ws = ThisWorkbook.Worksheets("alle")
Set rng = ws.Range("A1:A423757") ' Bereich, der bearbeitet wird
' Setze die Arbeitsblätter und relevanten Bereiche für die Überprüfung
Set ws17 = ThisWorkbook.Worksheets("17")
Set ws18 = ThisWorkbook.Worksheets("18")
Set ws19 = ThisWorkbook.Worksheets("19")
Set rng17 = ws17.Range("B551648:B994429")
Set rng18 = ws18.Range("B1:B987640")
Set rng19 = ws19.Range("B1:B750786")
' Lade den Bereich in ein Array
data = rng.Value2
' Durchlaufe jede Zelle im Array
For i = 1 To UBound(data, 1)
cellValue = data(i, 1)
' Prüfe, ob der Zellwert ein String ist und ob er mit ".html" endet
If InStr(cellValue, "about:") > 0 And Right(cellValue, 5) = ".html" Then
foundInSpecialRange = False
' Überprüfe, ob der Wert in einem der speziellen Bereiche auf den Blättern '17', '18' oder '19' vorhanden ist
If Not IsError(Application.Match(cellValue, rng17, 0)) Then
foundInSpecialRange = True
ElseIf Not IsError(Application.Match(cellValue, rng18, 0)) Then
foundInSpecialRange = True
ElseIf Not IsError(Application.Match(cellValue, rng19, 0)) Then
foundInSpecialRange = True
End If
' Ersetze "about:" basierend auf der Überprüfung
If foundInSpecialRange Then
' Wenn der Wert in einem der speziellen Bereiche gefunden wurde
data(i, 1) = Replace(cellValue, "about:", "Text1")
Else
' Wenn der Wert nicht in den speziellen Bereichen gefunden wurde
data(i, 1) = Replace(cellValue, "about:", "Text2")
End If
ElseIf InStr(cellValue, "about:") > 0 And Right(cellValue, 4) = ".jpg" Then
' Ersetze "about:" durch "https:" in .jpg-Links
data(i, 1) = Replace(cellValue, "about:", "https:")
End If
Next i
' Übertrage das geänderte Array zurück in den Bereich
rng.Value2 = data
' Bildschirmaktualisierung und Berechnung wieder aktivieren
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Anzeige