Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1908to1912
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

For each zu langsam

For each zu langsam
14.12.2022 14:38:47
Jürgen
Hallo zusammen,
ich dachte immer mit "for each Zellen in Range" bin ich schnell, aber es ist unglaublich langsam.
Ich möchte in meiner Tabelle alle Zellen mit bestimmten Hintergrundfarben leeren. jbGelb usw sind Konstanten (long)

For Each zelle In Range(WorkingRange)    'Cells(1, 1), Cells(278, 38)
If (zelle.Interior.Color = jbGelb) Or _
(zelle.Interior.Color = jbChange) Or _
(zelle.Interior.Color = jbInfo) Then zelle.Value = ""
Next
Könnt Ihr mir helfen? Weiß einer wie ich in einem Rutsch die Zellen bestimmter Farbe leeren kann?
lg Jürgen

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For each zu langsam
14.12.2022 14:52:56
Daniel
Hi
sammle erstmal die Zellen in einer Range und lösche dann alle gemeinsam:
dh statt

Zelle.Value= "" 
dann folgender Block:

if Bereich is Nothing then
Set Bereich = Zelle
else
Set Bereich = Union(Zelle, Bereich)
end If
und am ende dann das Löschen:

if Not Bereich is Nothing then Bereich.Clearcontents
Bei IF mit OR bietet es ich auch an, mit Select Case zu arbeiten.
hier der vollständige Code:

For Each zelle In Range(WorkingRange)    'Cells(1, 1), Cells(278, 38)
Select Case zelle.Interior.Color
Case jbGelb, jbChange, jbInfo
if Bereich is nothnig then
Set Bereich = Zelle
else
set Bereich = union(Bereich, Zelle)
end if
case else
end Select
Next
if not Bereich is nothing then Bereich.ClearContents
Gruß Daniel
Anzeige
AW: For each zu langsam
14.12.2022 15:28:02
Jürgen
Danke Daniel, es funktioniert. Ich musste nur das "nothnig" richtig stellen: "nothing". (für Nachnutzer)
AW: For each zu langsam
15.12.2022 01:34:22
Wolfgang
Hallo Daniel,
"ich dachte immer mit "for each Zellen in Range" bin ich schnell", das ist auch so.
"Ich möchte in meiner Tabelle alle Zellen mit bestimmten Hintergrundfarben leeren. jbGelb usw sind Konstanten (long)", dann tu nur das, wozu die weiteren Bedingungen, die kosten Dich Zeit.
Gruß Wolfgang
AW: For each zu langsam
14.12.2022 15:16:14
snb

Sub M_snb()
sn = Range("A1:AL278")
For Each it In Range("A1:AL278")
If InStr( " " & jbGelb & " " & jbChange & " " & jbInfo & " ""," " &  it.Interior.Color & " ") Then sn(it.Row, it.Column) = ""
Next
Range("A1:AL278")=sn
End Sub

Anzeige
AW: For each zu langsam
14.12.2022 15:33:16
Jürgen
Auch Dir DANKE! Nur ein Hochkomma war zu viel, so gehts:

If InStr(" " & jbGelb & " " & jbChange & " " & jbInfo & " ", " " & it.Interior.Color & " ") Then sn(it.Row, it.Column) = ""

Excel ist Zahl. Nicht Farbe. Wann lernt man das?
14.12.2022 15:32:55
lupo1
AW: Excel ist Zahl. Nicht Farbe. Wann lernt man das?
14.12.2022 15:36:35
Jürgen
Komischer Einwurf!
Beide haben mein Problem prima gelöst. Das ist es, was zählt!
btw: Excel ist viel mehr als "Zahl"
Man kann was "lösen", aber auch was "sein lassen".
14.12.2022 15:37:37
lupo1
AW: For each zu langsam
14.12.2022 15:44:44
Daniel
Das Problem ist folgendes:
jede Zellbearbeitung in Excel löst eine Folge von Prozessen aus, die im Hintergrund ablaufen müssen.
Der Bildschirm muss geändert werden, es muss geprüft werden, ob Formeln oder Bedingte Formatierungen vorhanden sind, die auf diese Zelle referenzieren und neu berechnet werden müssen, es muss geprüft werden, ob Eventmakros vorhanden sind, die ausgeführt werden müssen usw.
wenn man jede Zelle einzeln bearbeitet, laufen diese Prozesse jedes mal ab.
es gibt zwei Wege, das ganze zu beschleunigen:
a) man schaltet diese Prozesse aus (Application.Calculation = xlcalucationmanual, Application.EnableEvents = False, Application.ScreenUpdating = False)
b) man ändert alle Zellen gemeinsam, dann können diese Prozesse für alle zellen gemeinschaftlich ausgeführt werden.
dh wenn du 10 Brötchen kaufen willst, fährst du nicht 10x zum Bäcker und kaufst jedesmal ein Brötchen, sondern du fährst einmal hin und kaufst dann 10 Brötchen.
Gruß Daniel
Anzeige
AW: For each zu langsam
14.12.2022 17:52:18
Jürgen
Danke für die Aufklärung. Aber wer sagt denn, dass ich das nicht mache? Ich habe natürlich der Übersicht halber hier nur den Teil gepostet, um den es ging. Auch mit allen "Beschleunigern" ging es einfach zu langsam. Diese zwei Makros verwende ich:

Sub BeschleunigungAn()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlNone
End Sub
Sub BeschleunigungAus()
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
End Sub
Makros in der Tabelle, die weitere Dinge auslösen, habe ich nicht.
Übrigends finde ich es unmöglich seine Meinung nur in der Betreffzeile zu posten. Ich erwarte keine Antworten mehr, der Treat ist beendet.
Anzeige
AW: For each zu langsam
14.12.2022 18:11:30
Luschi
Hallo Jürgen,
diese wichtige und entscheidende Einstellung aus dem Tipp von Daniel hast Du vergessen:
Application.EnableEvents = False
Application.EnableEvents = True
Gruß von Luschi
aus klein-Paris
AW: For each zu langsam
14.12.2022 18:15:20
Daniel
Hi
naja, ich habe mich nicht dazu geäußert, was du machst und was nicht.
ich habe nur die beiden Methoden beschrieben, die man anwenden kann um Zellbearbeitung über VBA zu beschleunigen.
b) ist dabei die bessere, was wahrscheinlich daran liegt, dass es auch Hintergrundaktionen gibt, die man nicht ausschalten kann.
Ich sehe das sogar so: wenn das Ausschalten der Hintergrundaktivitäten eine spürbare Beschleunigung bringt, ist der Code noch nicht optimal programmiert und kann verbessert werden.
wenn man über das Ausschalten der Hintergrundaktivitäten beschleunigt, hat man zusätzlich das Problem, dass man diese wieder einschalten muss, auch im Fehlerfall (vorallem, wenn das Makro von anderen verwendet wird) . Manche Aktivitäten werden automatisch wieder eingeschaltet (ScreenUpdating), andere nicht. Wenn also da Makro schnell genug ist, ohne dass man irgendwas umstellen muss, ist das immer besser, weil im Falle eines Abbruchs nicht irgendwas verstellt ist.
das Ausschalten der Eventmakros beschleunigt auch dann, wenn man keine hat, denn dann muss VBA nicht schauen, ob es welche gibt.
und das mit der Betreffzeile musst du mir nicht erklären.
Gruß Daniel
Anzeige
OT: Ende des Genusses?
14.12.2022 19:13:18
Luc:-?
Wenn im Betreff der Genuss/die Behandlung (treat) auf den Punkt gebracht wird, Jürgen,
warum soll dann noch ein (Gesprächs-)Faden (thread) drangehängt wdn…? ;-]
Gruß, Luc :-?
AW: OT: Ende des Genusses?
14.12.2022 19:27:53
Daniel
das gelingt aber selten, außer man hat sehr wenig zu sagen.
außerdem meinst du wahrscheinlich oder "body" statt "thread".
Den Faden hat man ja auch dann weitergesponnen, wenn der Beitrag nur aus "header" besteht.
Sicher, aber das war nicht das Anliegen. ;-) owT
15.12.2022 19:12:51
Luc:-?
:-?
nein,aber dein Einwand war ebenfalls nicht das
15.12.2022 20:16:44
Daniel
Anliegen
Deshalb OT u.das=mein Anliegen! owT
16.12.2022 02:41:56
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige