Problemstellung

In meiner täglichen Arbeit mit Excel stoße ich oft auf Tabellen, in denen nicht alle Zellen befüllt sind. Das kann schnell zu Problemen führen, besonders wenn diese leeren Zellen wichtige Daten enthalten sollten. Um diese Zeilen leichter zu identifizieren, ist es hilfreich, sie farblich hervorzuheben. Während die bedingte Formatierung in Excel eine Möglichkeit bietet, möchte ich zeigen, wie man dies effektiv mit VBA erreichen kann.

Ansatz

Es gibt verschiedene Szenarien, in denen Zeilen hervorgehoben werden sollen:

  1. Wenn eine bestimmte Spalte leer ist.
  2. Wenn die gesamte Zeile leer ist.
  3. Wenn mindestens eine Zelle in der Zeile leer ist.

Wenn eine bestimmte Spalte leer ist

Public Sub HighlightRowIfSpecificColumnIsEmpty(columnToCheck)
Dim myRange As Range
Dim row As Range
Dim columnToCheck As Integer
# columnToCheck = 2 ' Spalte B (ändere dies nach Bedarf)
' Definiere den Bereich, der geprüft werden soll
Set myRange = ActiveSheet.UsedRange
' Durchlaufe jede Zeile im Bereich
For Each row In myRange.Rows
If IsEmpty(row.Cells(1, columnToCheck).Value) Then
' Hervorheben der gesamten Zeile
row.Interior.Color = RGB(255, 255, 0) ' Gelb
Else
' Entferne Hervorhebung, falls vorhanden
row.Interior.ColorIndex = xlNone
End If
Next row
End Sub

Wenn die gesamte Zeile leer ist

Public Sub HighlightRowIfEntireRowIsEmpty()
Dim myRange As Range
Dim row As Range
' Definiere den Bereich, der geprüft werden soll
Set myRange = ActiveSheet.UsedRange
' Durchlaufe jede Zeile im Bereich
For Each row In myRange.Rows
If Application.CountA(row) = 0 Then
' Hervorheben der gesamten Zeile
row.Interior.Color = RGB(255, 255, 0) ' Gelb
Else
' Entferne Hervorhebung, falls vorhanden
row.Interior.ColorIndex = xlNone
End If
Next row
End Sub

Wenn mindestens eine Zelle in der Zeile leer ist

' Hervorheben von Zeilen, in denen mindestens eine Zelle leer ist
Public Sub ZeilenMitLeerenZellenHervorheben()
' Ermitteln der letzten Zeile und Spalte mit Inhalt
Dim myRows As Long
myRows = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Dim myColumns As Long
myColumns = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
' Definieren des zu prüfenden Bereichs
Dim myRange As Range
Set myRange = Range(ActiveSheet.Cells(2, 1), ActiveSheet.Cells(myRows, myColumns))
' Umwandlung der Spaltennummer in Buchstaben
Dim ColumnLetter1 As String
Dim ColumnLetter2 As String
ColumnLetter1 = ConvertToColumnLetter(1)
ColumnLetter2 = ConvertToColumnLetter(myColumns)
' Hinzufügen der bedingten Formatierung
Dim oFC As FormatCondition
Set oFC = myRange.FormatConditions.Add(Type:=xlExpression, Formula1:= _
"=COUNTBLANK($" & ColumnLetter1 & "2:$" & ColumnLetter2 & "2)<>0")
' Festlegen der Formatierungsregeln
With oFC.Interior
.PatternColorIndex = xlAutomatic
.Color = 65535 ' Gelb
.TintAndShade = 0
End With
' Weiterführen der Prüfung trotz Übereinstimmung
oFC.StopIfTrue = False
End Sub

Was macht dieser Code?

Dieser Code durchläuft jede Zeile in einem definierten Bereich der Excel-Tabelle. Wenn in einer Zeile mindestens eine Zelle leer ist, wird diese Zeile gelb hervorgehoben. Der Code verwendet die Funktion COUNTBLANK in einer bedingten Formatierungsregel, um leere Zellen zu zählen.