Microsoft Excel

Herbers Excel/VBA-Archiv

Makro zum Ersetzen dauert ewig


Betrifft: Makro zum Ersetzen dauert ewig
von: Jens
Geschrieben am: 11.01.2019 14:07:04

Hallo zusammen,

in einem Arbeitsblatt habe ich 230.000 Zeilen mit Einträgen. In Spalte 4 möchte ich alle leeren Zellen mit "unbekannt" ersetzen. Das Makro dauert ewig. Gibt es elegantere und vor allem schnellere Lösungen dafür?

Auszug:

'Formelberechnung unterbrechen
Application.Calculation = xlCalculationManual

'umbenennen in unbekannt
Dim i
For i = Cells(Rows.Count, 4).End(xlUp).Row To 11 Step -1
On Error Resume Next
If Cells(i, 4).Value = "" Then
Cells(i, 4).Value = "unbekannt"
End If
Next

'Formelberechnung aktivieren und Neuberechnung
Application.Calculation = xlCalculationAutomatic
Application.Calculate

Besten Dank für Eure Hilfe

  

Betrifft: AW: Makro zum Ersetzen dauert ewig
von: Malte
Geschrieben am: 11.01.2019 14:14:51

Hallo Jens,

der einfachste Weg um deinen Code zu beschleunigen ist folgender:

'Formelberechnung unterbrechen
Application.ScreenUpdating = False

und

Application.ScreenUpdating = True

noch jeweils zu deiner Zeile:
Application.Calculation = xlCalculationManual

und

Application.Calculation = xlCalculationAutomatic

hinzufügen.


  

Betrifft: AW: Makro zum Ersetzen dauert ewig
von: Jens
Geschrieben am: 11.01.2019 14:24:23

Hallo Malte,

Application.ScreenUpdating ist am Anfang und Ende des Makro eingebaut. Ebenfalls die Unterbrechung der Formelberechnung und deren Aktivierung. Siehe Auszug

BG Jens


  

Betrifft: AW: Makro zum Ersetzen dauert ewig
von: onur
Geschrieben am: 11.01.2019 14:32:43

Dim z,lz
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
lz=Cells(Rows.Count, 4).End(xlUp).Row
For z = 1 to lz
  If Cells(z, 4) = "" Then Cells(z, 4) = "unbekannt"
Next z
'Formelberechnung aktivieren und Neuberechnung
Application.ScreenUpdating = true
Application.Calculation = xlCalculationAutomatic

Application.Calculate


  

Betrifft: AW: Makro zum Ersetzen dauert ewig
von: onur
Geschrieben am: 11.01.2019 14:36:35

Sorry, muss natürlich lauten:

For z = 11 to lz



  

Betrifft: AW: Makro zum Ersetzen dauert ewig
von: Daniel
Geschrieben am: 11.01.2019 14:39:34

HI

probier mal

Range("D11:D" & cells(rows.count, 4).end(xlup).Row).Replace "", "unbekannt", xlwhole

oder
With Cells.SpecialCells(xlCellTypeLastCell)
    With Range(.Offset(11 - .Row, 1), .Offset(0, 1))
        .FormulaR1C1 = "=IF(RC4="""",""unbekannt"",RC4)"
        .Copy
        .Offset(0, 4 - .Column).PasteSpecial xlPasteValues
        .ClearContents
    End With
End With
wenn man schnelle und elegante Lösungen in VBA sucht, dann wird man häufig fündig, wenn man sich überlegt, wie man diese Aufgabe ohne VBA schnell und elegant lösen könnte und dann diesen Weg in VBA nachprogrammiert.




Gruß Daniel


  

Betrifft: AW: Makro zum Ersetzen dauert ewig
von: Günther
Geschrieben am: 11.01.2019 17:54:45

Moin,
mit Power Query, -> http://www.excel-ist-sexy.de/power-query-das-add-in/ist das recht schnell abgehakt ... (null ersetzen durch "unbekannt")

Gruß
Günther


  

Betrifft: ob man dafür PQ braucht?
von: Daniel
Geschrieben am: 11.01.2019 18:23:35

das kann eigentlich auch das normale ERSETZEN von Excel
Gruß Daniel


  

Betrifft: AW: ob man dafür PQ braucht?
von: Jens
Geschrieben am: 14.01.2019 07:58:25

Moin zusammen,

ich habe jetzt mit der Lösung von Daniel

Range("D11:D" & Cells(Rows.Count, 4).End(xlUp).Row).Replace "", "unbekannt", xlWhole

eine sehr gute Performance.

Besten Dank für die schnelle Hilfe