normalerweise googel ich mir jedes Excel-Problem weg, aber jetzt stehe ich nach Jahren mal so richtig auf dem Schlauch.
Ich möchte spaltenweise (nicht das komplette Tabellenblatt auf ein Mal) diejenigen Zellen leeren, die scheinbar bereits leer sind - heißt in meinem Fall: Zellen, die mit Formeln gefüllt sind, aber aktuell kein Ergebnis ausgeben.
Dazu habe ich mir vor langer Zeit schon folgenden Code zusammengestellt:
Dim vSpalte As Range
Dim lngLast As Long
Dim lngZ As Long
Dim actClmn As Integer
Dim lngC As Long
For Each vSpalte In Range("E11", "BJ11").Columns
vSpalte.Select
If vSpalte.Offset(-1, 0).Value = "c" Then
actClmn = ActiveCell.Column
lngLast = Cells(Rows.Count, actClmn).End(xlUp).row
For lngZ = lngLast To ActiveCell.row + 29 Step -1
If Cells(lngZ, actClmn).Value = "" Then
Cells(lngZ, actClmn).Value = ""
lngC = lngC + 1
End If
Next
End If
Next
Das Makro läuft zunächst über die Zeile 11 von E nach BJ und bearbeitet ausschließlich diejenigen Spalten, die ich jeweils eine Zeile darüber, in Zeile 10, mit "c" gekennzeichnet habe - und zwar End(xlUp) von der letzten gefüllten Zelle der "c"-Spalte bis Zeile 40.
Funktioniert alles prima, aber ich möchte diesen Code nun auf ein neues, deutlich größeres Tabellblatt übertragen - und hier dauert die Berechnung geschlagene 12 Minuten. Die letzte gefüllte Zeile ist die Nummer 1996, was ja eigentlich so groß gar nicht ist.
Spaßeshalber habe ich --Cells(lngZ, actClmn).Value = ""-- mal ersetzt durch
Cells(lngZ, actClmn).select
With Selection.Interior
.ColorIndex = 40
.Pattern = xlSolid
End With
Statt den Content zu clearen färbt ein Durchlauf nun die betreffenden Zellen einfach ein - und das in einem Affentempo! WIESO? Eine Zelle zu leeren kann doch nicht so viel mehr Aufwand sein als dieselbe Zelle bloß einzufärben. Ich kriegs nicht gebacken.
Wie auch immer, vielleicht hat jemand hier eine Idee, wie ich von den 12 Minuten auf 2 komme oder so, 2 Minuten wären im Rahmen, 12 nicht.
Grüße,
Dirk.