Excel Bedingte Formatierung wenn Wert ungleich leer

Abe81

Rear Admiral
Registriert
Feb. 2011
Beiträge
5.882
Hallo,

ich nutze bedingte Formatierungen, um mir Zellen hervorzuheben, wenn diese nicht leer sind. Sie färben sich gelb, wenn Folgendes WAHR ist:

Code:
=ISTTEXT(<Zelle>)

Das funktioniert so lange, wie ich die Werte manuell in die Zellen eingebe. Wird der Wert allerdings durch eine Formel generiert, dann formatiert Excel das Feld immer gelb, auch wenn das Formelergebnis leer ist. Die Formel in der Zelle, die bedingt formatiert werden soll, lautet:

Code:
=WENN(ISTLEER(<andere Zelle>);"";<andere Zelle>)

Wie kann ich Excel dazu bringen, nicht immer bedingt zu formatieren?
 
Versuche mal für die Bedingung der Formatierung folgende Formel: =NICHT(ISTLEER(ZELLE))
 
Danke für den Tip, ich habe schon mal probiert, es über die Umkehrung NICHT zu lösen. Das Problem daran: Wenn eine Formel in der Zelle ist, ist sie nie leer.

Die Formel in der Zelle lautet:
Code:
=WENN(ISTLEER(<andere Zelle>);"";<andere Zelle>)

Den könnte ich theoretisch ersetzen durch
Code:
=<andere Zelle>

Das Wenn-Dann-Konstrukt habe ich nur eingebaut, damit mir keine 0 angezeigt wird, wenn die Zelle leer ist.


Egal, was ich dann in der bedingten Formatierung eingebe, also z.B. Wenn <Zelle> ungleich 0 oder ungleich "", sie wird immer formatiert.
 
Hmm, stimmt. Scheinbar habe ich gestern einen Fehler beim Testen gemacht.
Welche Inhalte haben die Zellen denn, wenn sie Inhalte haben? Falls es nur Zahlen sind, dann könntest du z.B.
Code:
=(ISTZAHL(<ZELLE>)=WAHR)
verwenden.
 
Wenn z. B. A1 die untersuchte Zelle ist und B1 die Zelle, wo der Wert herkommt, dann klappt:
1. A1 befüllen mit WENN(B1="";"";B1)
2. A1 für die Bedingungen untersuchen mit =A1=""
Mit ein paar Dollarzeichen klappt das dann auch für größere Bereiche.
 
Leider keine Zahlen, sondern alphanumerisch und numerisch.

Aber halwes Tip funktioniert.

Ich habe es jetzt doch mit einem umständlichen workaround gelöst.

Code:
=WENN(ISTLEER(<andere Zelle>);"";<andere Zelle>)

Die obige Formel habe ich durch einen einfaches "=<andere Zelle>" ersetzt. So wird immer die eine "0" angezeigt, wenn die andere Zelle leer ist. In der bedingten Formatierung habe ich dann zwei Regeln erstellt
1. Wenn =0, dann Schrift weiß (sodass man die "0" nicht mehr sieht), wenn <>0, dann Feld gelb markieren.

Da Ziel des ganzen Unterfangen sowieso nur war, die Tabelle für regelmäßiges Ausdrucken automatisch formatieren zu lassen, kann ich damit leben.

Danke für die Hilfe.
Ergänzung ()

Noch eine ergänzende Frage zur selben Tabelle, aber das betrifft eine andere Funktion:

Die Zellen, die nicht leer sind, werden gelb formatiert - so weit, so gut.

Das Arbeitsblatt, aus dem die Daten per Verweis (z.B. "='Arbeitsblatt'!A1") übernommen werden, hat eine Art Ampelsystem:
gelb = Termin liegt an
orange = überfällig
grün=erledigt

Die Formatierungen werden von zwei Mitarbeitern manuell gepflegt. Das Zielarbeitsblatt, in der ich die oben diskutierten bedingten Formatierungen übernommen habe, färbt aber ausschießlich gelb. Nun sollen nicht nur die Leute, die die Rohdaten einpflegen, sondern auch jene, die ausgedruckte Tabelle als Arbeitsgrundlage nutzen, diese Ampelsystem haben. In Excel-Sprache übersetzt:

Wenn sich die Zell-Füllfarbe in Arbeitsblatt1 ändert, soll sie sich auch in Arbeitsblatt2 ändern.

Kann man das mit bedingten Formatierungen lösen oder benötige ich dazu ein VBA-Skript?

P.S. Excel-Version ist 1711
 
Zuletzt bearbeitet:
Wenn sich die Zell-Füllfarbe in Arbeitsblatt1 ändert, soll sie sich auch in Arbeitsblatt2 ändern.
Klares Kommt-drauf-an ;)

Wenn auf Blatt 2 eine direkte Referenz auf die Zelle von Blatt 1 existiert und ebenfalls eine bedingte Formatierung dann geht das ohne VBA.
Mit VBA ist auch kitzlig. Es muss ja einen «Trigger» geben der das anstößt, worauf das Makro einem ganzen Bereich abgrasen muss um in Auf Blatt 2 gemäß gefundener Farbe einzufärben. Das dauert und ist damit nur sinnvoll wenn ich Ballt 2 aktiviere (Ereignsimakro).

Wenn eine Formel in der Zelle ist, ist sie nie leer.
Das halte ich mal vorsichtig für grandiosen Unfug da ja gerade über Formeln Zustände anfallen die interessant für eine Bedingte Formatierung sind.

Die Prüfung auf ="" oder <>"" sollte sich am Resultat einer Formel oder etwas Eingetipptem bzw. gelöschten orientieren.
Früher hat man sich mit dem berühmten Neutralen Element beholfen, also zum Inhalt 0 addiert oder mal 1 genommen (oder eine Leerstring angehängt) - das hat jeden Inhalt eingenordet und klare Antworten geschaffen.

CN8
 
Mit VBA muss man nichts "abgrasen". Das change-Event des Worksheet-Objektes gibt genau an, welche Zelle bzw. welcher Bereich geändert wurde. Das kann man dann gezielt verarbeiten ...

Hier ein Beispiel für eine einzelne Zelle, der Code gehört ins Arbeitsblatt1. Wenn die Farbe einer einzelnen Zelle im Arbeitsblatt1 geändert wird, dann wird die Farbe der entsprechenden Zelle auf Arbeitsblatt2 ebenfalls geändert.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  if Target.Cells.Count = 1 Then
    Worksheets("Arbeitsblatt2").Cells(Target.Column, Target.Row).Interior.ColorIndex=Target.Interior.ColorIndex
  end if
End Sub
 
CN8's neuer Ansatz zur automatischen Formatierung, das hatten wir ja schon diskutiert und ausprobiert, ja letztlich einen Workaround gefunden.
Die Nutzung einer Ereignisroutine seitens Andreas dürfte eher nicht funktionieren, da WorksheetChange bei der Änderung der Farbe nicht getriggert wird. Außerdem sind Makros, erst recht Ereignismakros, bei verteilter Bearbeitung und unterschiedlichen Sicherheitsmotivationen auch keine gute Lösung.

Abe8's zweite Frage bleibt.
Da man Formatierungen schlecht von einem Blatt zum anderen verknüpfen kann, würde ich empfehlen, die Mitarbeiter dazu zu bringen, statt der Farben inhaltliche Kennzeichnungen zu verwenden, z. B. ein Häkchen nach dem Termin.
Alternativ ein Dropdown neben der Terminzelle, wo man eine Farbe auswählen kann, die dann unsichtbar in das (schmale) Dropdown geschrieben wird und zur Einfärbung des Terminfeldes führt. Diesen Wert könnte man dann ohne Makros in ein anderes Arbeitsblatt übertragen bzw. zu dessen Einfärbung nutzen.
 
halwe schrieb:
Die Nutzung einer Ereignisroutine seitens Andreas dürfte eher nicht funktionieren, da WorksheetChange bei der Änderung der Farbe nicht getriggert wird.
Sorry, habe hier kein Excel und konnte nicht testen ...

An Stelle des Worksheet_Change Events kann man das Worksheet_SelectionChange Event nutzen. Allerdings sollte man dann mit Intersect prüfen, ob die selektierte Zelle im zutreffenden Bereich liegt.


Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim colorChangeable As Range
  ' Bereich, innerhalb dem die Farbe geändert werden kann'
  Set colorChangeable = Range("B1:B20")
  if Target.Cells.Count = 1 Then
    If Intersect(Target, colorChangeable ) Is Nothing Then Exit Sub
    Worksheets("Arbeitsblatt2").Cells(Target.Column, Target.Row).Interior.ColorIndex=Target.Interior.ColorIndex
  end if
End Sub
 
Mit VBA muss man nichts "abgrasen"
Muss man doch weil du nie sicher sein kannst, dass auch aller Rest korrekt gespiegelt ist.
Und sollte ich mich ganz böse irren bekommts du die Adresse der aktiven Zelle (mit der Änderung) aber nicht die in der / in denen sich bedingt was umformatiert hat.

CN8
 
Zurück
Oben