607 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo.

In Zeile 1 meiner Tabelle erstelle ich Summen der darunter liegenden Zellen. Wenn Summe = 0 ist, soll die Spalte per Makro gelöscht werden. Anbei mein Code

Do While ActiveCell.Value <> ""

If ActiveCell.Value = "0" Then

ActiveCell.EntireColumn.Delete

Else

ActiveCell.Offset(0, 1).Select

End If

Loop


Der funktioniert einwandfrei, allerdings dauert es mir zu lange bis alle 52 Spalte durchlaufen sind. Gibts da eine Prozedur, welche die Aufgabe schneller erledigen kann?

5 Antworten

0 Punkte
Beantwortet von
Hallo mabon!

Schreibe vor die Zeile

[code]Do While ActiveCell.Value <> ""[/code]

die Zeile

[code]Application.ScreenUpdating = False[/code]

Das bewirkt, dass die Bildschirmaktualisierung ausgeschaltet wird. Außerdem lass die Zeile

[code]ActiveCell.Offset(0, 1).Select
[/code]
weg. Die bewirkt doch gar nichts, außer dass Sie etwas markiert, was nicht notwendig ist. Außerdem kann man fast gänzlich auf[i] .Select [/i]verzichten.

MfG,
Oliver
0 Punkte
Beantwortet von
Hallo Oliver.

Danke für Deine Antwort. Ich habe das gleich ausprobiert. Leider bringt es am Ende keinen merklichen Performance - Schub. Die Prozedur muss halt immernoch alle 52 Zellen durchlaufen und den Inhalt prüfen.

Vielleicht gibt es ja noch eine andere Möglichkeit.
0 Punkte
Beantwortet von
Hallo!

Darf ich mal fragen, was bei Dir "dauert zu lange" ist. Wie lange, in Zeit ausgedrückt, dauert denn der VBA-Code?

Gruß,
Oliver
0 Punkte
Beantwortet von
Hallo Comunitty

Bei einer absoluten Adressierung könnt Ihr die Adressen Sammeln und dann per Range(Sammelstring).delete mit einem Rutsch löschen!

Adressierung z.b. B + D
$B$1:$B$65536,$D$1:$D$65536

Gruß Nighty
0 Punkte
Beantwortet von
Hallo Community!

Tip!
Der anhand einer If Bedingung erzeugte String(Construct) innerhalb einer Schleife könnte dann so aussehen!

SpIndex,waere hier der SchleifenIndex

[code]Daten = Daten & Cells(1, SpIndex).Address & ":" & Cells(Rows.Count, SpIndex).Address & ","[/code]

Gruß Nighty
...