Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1560to1564
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

Zellen bei Wert rot färben

Zellen bei Wert rot färben
08.06.2017 09:18:27
Tarje_089
Hallo Zusammen,
meine Frage bezieht sich auf das hervorheben von Zellen, sofern diese einen bestimmten Wert enthalten bzw. unter einem Wert liegen.
Nun geht dies logischerweise per bedingter Formatierung, allerdings habe ich gehört, dass dies die Datei extrem verlangsamt (ca 80 Spalten und 50.000 Zeilen, sowie mehrere Tabellen).
Nun wollte ich fragen, ob es hierfür die Möglichkeit gibt, dies über ein Makro abzudecken, welches der User selbst aktivieren kann?
Ziel wäre es bspw. für Spalte T ab Zeile 23 bis 50.000 alle Zellen rot zu markieren, deren Wert kleiner 0 ist.
Sofern dies möglich ist, auch noch die Frage, ob auch nach bestimmten Wörtern wie "Unknown" gesucht warden kann?
Vielen Dank im Voraus für Eure Rückmeldung.
Gruß
Tarje

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das Ausmaß der Verlangsamung ...
08.06.2017 09:50:36
lupo1
... hängt von der Formel der bedF (die scheint ja eher einfach zu sein) sowie der Anzahl der Zellen ab.
Wenn Du dies also nur "gehört" hast, wäre ein Selbstversuch sinnvoll.
AW: Das Ausmaß der Verlangsamung ...
08.06.2017 11:28:08
Tarje_089
Hi,
die Tabelle hat wie oben beschrieben ca. 80 Spalten a 50.000 Zeilen.
Habs auch gerade nochmal ausprobiert und die Performance ist durch die bedingte Formatierungen eine absolute katastrophe.
Ich hatte im Internet folgendes gefunden:
Option Explicit
Sub achim()
Dim rngCell As Range
For Each rngCell In Range("A23:A50000")
If InStr(1, rngCell.Value, "Unknown") > 0 Then
rngCell.Interior.ColorIndex = 45
End If
Next rngCell
End Sub
Das funktioniert zumindest für Begriffe, in diesem Beispiel "Unknown" gut. Könnte mir bitte jemand zeigen, wie ich hier nun weitere Prüfungen anbaue, d.h. das im Anschluss dann Spalte B23:B50000 geprüft wird, ob hier negative Zahlen enthalten sind.
Bin leider nur mit dem Macro-recorder vertraut und das funktioniert, deswegen bitte ich um Nachsicht meiner fehlenden VBA-Kenntnisse ;-).
Sofern mir jemand erklären könnte, wie ich dann weitere Abfragen anhängen kann bzw. mit den End if umgehen muss, wäre ich extremist dankbar.
Vielen Dank im Voraus.
Gruß
Tarje
Anzeige
AW: Das Ausmaß der Verlangsamung ...
08.06.2017 11:29:36
Tarje_089
Edit.
AW: Das Ausmaß der Verlangsamung ...
08.06.2017 12:13:23
yummi
Hallo Tarje,
das geht so:

ption Explicit
Sub achim()
Dim rngCell As Range
For Each rngCell In Range("A23:B50000")
if rngCells.Column = 1 then  'Spalte A
If InStr(1, rngCell.Value, "Unknown") > 0 Then
rngCell.Interior.ColorIndex = 45
End If
end if
if rngCells.Column = 2 then  'Spalte B
If rngCell.Value 
ungetestet
Gruß
yummi
AW: etwas einfacher...
08.06.2017 12:48:48
Daniel
Hi
Sub achim()
Dim rngCell As Range
For Each rngCell In Range("A23:A50000")
If InStr(1, rngCell.Value, "Unknown") > 0 Then rngCell.Interior.ColorIndex = 45
If rngCell.Offset(0, 1).Value 
Gruß Daniel
Anzeige
AW: etwas einfacher...
08.06.2017 13:48:58
Tarje_089
Hallo Yummi & Daniel,
vielen Dank für Eure Rückmeldungen.
Nun noch eine Frage: Sobald ich eine weitere Abfrage anhängen möchte, erhalte ich Laufzeitfehler 13.
Erweiterung bei Daniel's Code:
Option Explicit
Sub achim()
Dim rngCell As Range
For Each rngCell In Range("A23:A50000")
If InStr(1, rngCell.Value, "Unknown") > 0 Then rngCell.Interior.ColorIndex = 45
If rngCell.Offset(0, 1).Value  0 Then rngCell.Offset(0, 2).Interior.ColorIndex = 45
Next rngCell
End Sub
Erweiterung bei Yummi's Code:
Option Explicit
Sub achim()
Dim rngCell As Range
For Each rngCell In Range("A23:C50000")
if rngCell.Column = 1 then  'Spalte A
If InStr(1, rngCell.Value, "Unknown") > 0 Then
rngCell.Interior.ColorIndex = 45
End If
end if
if rngCell.Column = 2 then  'Spalte B
If rngCell.Value  0 Then
rngCell.Interior.ColorIndex = 45
End If
end if
Next rngCell
End Sub
Was mache ich hier falsch oder ist eine Erweiterung gar nicht möglich/sinnvoll?
Gruß
T
Anzeige
AW: etwas einfacher...
08.06.2017 14:08:06
yummi
hallo Tarje,
Laufzeitfehler 13 zeigt das es Typenunverträglichkeiten gibt. Hast Du evtl in deienr Spalte C Werte stehen, die keine Zahl sind?
Kannst Du so abfangen:

if IsNumeric( rngCell.Offset(0, 2).Value) and  rngCell.Offset(0, 2).Value > 0 Then

oder bei in der anderen Variante

if IsNumeric( rngCell.value) then
If rngCell.Value > 0 Then
rngCell.Interior.ColorIndex = 45
End If
end if

gruß
yummi
AW: etwas einfacher...
08.06.2017 14:14:32
Daniel
Hi
der Fehler 13 dürfte hier nur auftreten, wenn in der abgefragten Zelle ein Fehlerwert (#NV, #Wert, #Bezug, #Div/0) steht.
Die müssen gesondert behandelt werden, mit dieser Abfrage kannst du prüfen, ob in der Zelle auch eine Zahl steht:
If VarType(rngCell.Offset(0, 2).Value) = vbDouble Then If rngCell.Offset(0, 2).Value > 0 Then rngCell.Offset(0, 2).Interior.ColorIndex = 45
die VarType-Abfrage kannst du mit einem Fehlerwert machen, den Vergleich mit mit einer Zahl leider nicht.
Gruß Daniel
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige