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

In Spalte leere Zelle erkennen /farblich markieren

In Spalte leere Zelle erkennen /farblich markieren
21.04.2009 08:56:19
Joachim
Hi,
ich mal wieder: ich lese Daten in mein Tabellenblatt "DATEN" ein. Dann möchte ich überprüfen, ob es in der Spalte B irgendwo eine Zelle gibt , die leer ist. Den Range des Datenbereichs ermittle ich so:
lngRow = Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
Range("B10:B" & lngRow)
Wie kann ich nun innerhalb meines ermittelten Range die Spalte B durchlaufen und nach leeren Zellen suchen. Wenn eine leere Zelle gefunden wurde, soll die entsprechende Zeile GELB und die betroffene Zelle ROT markiert werden. Dann weiter bis zur nächsten Zelle , bis ans Ende meines Ranges.
Hat da jemand eine Idee ?
Danke mal
Gruss
Joachim

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Habe aber ein dynamischen Range ...
21.04.2009 09:42:23
Joachim
Hi Jan,
Danke. Mein Problem ist aber, da ich immer wieder neue Daten einlese und mein Range immer unterschiedlich ist, möchte ich auch nur den eingelesenen Range überprüfen und markieren.
Darum würde ich das am liebsten per VBA machen.
Gruss
Joachim
AW: Habe aber ein dynamischen Range ...
21.04.2009 10:01:38
Tino
Hallo,
versuche und teste es mal hiermit.
Sub Beispiel()
Dim lngRow As Long, lngCol As Long
Dim Bereich As Range
Dim objTab As Worksheet

'eventuell Namen anpassen 
Set objTab = ActiveSheet

With objTab
    .UsedRange.Interior.ColorIndex = xlColorIndexNone
    lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
    lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
    Set Bereich = .Range("B10:B" & lngRow)


For Each Bereich In Bereich.SpecialCells(xlCellTypeBlanks)
 .Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
 Bereich.Interior.ColorIndex = 3
Next Bereich

End With

End Sub


Gruß Tino

Anzeige
sieht fast gut aus...
21.04.2009 10:14:42
Joachim
Hi Tino,
Vielen Dank. Sieht fest gut aus. Nur eine Bitte: wenn ich den Code ausführe, verschwinden innerhalb der Zeilen 1 - 9 , also den Teil, den ich eigentlich ausschliessen will, die Farbhintergründe der Zellen (Überschrift)
Geht der Code nicht erst ab B10 los ?
Gruss
Joachim
machen wir es gut ;-)
21.04.2009 10:27:47
Tino
Hallo,
wollte den einfachen Weg gehen, dachte die Tabelle hätte noch keine Formatierung.
Ist aber schnell erledigt.
Sub Beispiel()
Dim lngRow As Long, lngCol As Long
Dim Bereich As Range
Dim objTab As Worksheet

'eventuell Namen anpassen 
Set objTab = ActiveSheet

With objTab
    
    lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
    lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
    Set Bereich = .Range("B10:B" & lngRow)
    Bereich.Interior.ColorIndex = xlColorIndexNone

For Each Bereich In Bereich.SpecialCells(xlCellTypeBlanks)
 .Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
 Bereich.Interior.ColorIndex = 3
Next Bereich

End With

End Sub


Gruß Tino

Anzeige
Perfekt, Vielen Dank owT
21.04.2009 10:36:41
Joachim
wo wird denn nach "leer" gesucht...
21.04.2009 11:00:29
Joachim
.. Hi Tino,
ist das die Spalte, wo nach leeren Zellen gesucht wird:
lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
(dieses "*") ?
Wie sieht denn die Zeile aus , wenn nicht nicht nach Leeren, sondern zB Abfrage IST NICHT "TEST"
Danke und Gruss
Joachim
nein so nicht.
21.04.2009 11:26:37
Tino
Hallo,
wenn Du nach einem bestimmten Begriff suchen möchtest,
geht dies am schnellsten mit einer Hilfsspalte die am Schluss wieder gelöscht wird.
Man könnte es noch schneller machen wenn man den Bereich zuvor noch Sortiert und danach wieder zurücksortiert, aber so sollte es erst mal reichen.
Noch schneller würde es nur noch gehen, wenn man die Bedingte Formatierung dafür nutzt.
Wenn ich noch Lust habe werte ich ein Beispiel aufbauen.
Kommentare stehen im Code.
Option Explicit

Sub Beispiel()
Dim lngRow As Long, lngCol As Long, lngCol1 As Long
Dim Bereich As Range
Dim objTab As Worksheet
Dim SuchBegriff As String

'Suchbegriff************* 
SuchBegriff = "Test"

'eventuell Namen anpassen 
Set objTab = ActiveSheet

'Bildschirmaktualisierung aus 
Application.ScreenUpdating = False
 
    With objTab
        'Suche letzte Zeile 
        lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
        'Suche letzte Spalte 
        lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
        'Bereich in B eingrenzen 
        Set Bereich = .Range("B10:B" & lngRow)
        'Merke Spalte aus Bereich 
        lngCol1 = Bereich.Column
        'Farben zurücksetzen in Spalte B 
        Bereich.Interior.ColorIndex = xlColorIndexNone
        'letzte Spalte bestimmen 
        Set Bereich = Bereich.Offset(0, .Columns.Count - lngCol1)
        'Formel einfügen 
        Bereich.FormulaR1C1 = "=IF(RC" & lngCol1 & "=""" & SuchBegriff & """,0,"""")"
        'prüfen ob der Wert 0 in der letzten Spalte vorkommt 
        If Application.WorksheetFunction.CountIf(Bereich, 0) > 0 Then
         'Schleife über alle Zellen mit dem Wert 0 
            For Each Bereich In Bereich.SpecialCells(xlCellTypeFormulas, 1)
             'Zeile gelb färben 
             .Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
             'Zelle rot färben 
             Cells(Bereich.Row, lngCol1).Interior.ColorIndex = 3
            Next Bereich
        End If
       'Hilfsspalte löschen 
       .Columns(Columns.Count).Delete
    
    End With
'Bildschirmaktualisierung ein 
Application.ScreenUpdating = True
End Sub


Gruß Tino

Anzeige
AW: wo wird denn nach "leer" gesucht...
21.04.2009 12:05:35
Tino
Hallo,
hier mal eine Version mit der Bedingten Formatierung.
Unter xl2007 ist es einfacher, aber so geht’s auch.
Option Explicit

Sub Beispiel2()
Dim lngRow As Long, lngCol As Long
Dim Bereich1 As Range, Bereich2 As Range
Dim SuchBegriff As String
Dim objTab As Worksheet

'Suchbegriff************* 
SuchBegriff = "Test"

Application.ScreenUpdating = False

    'eventuell Namen anpassen 
    Set objTab = ActiveSheet

 
    With objTab
        'Suche letzte Zeile 
        lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
        'Suche letzte Spalte 
        lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
        
        Set Bereich1 = Range("A10", Cells(lngRow, 1))
        Set Bereich2 = Range("B10", Cells(lngRow, 2))
        
        Bereich2.FormatConditions.Delete
        Bereich2.FormatConditions.Add Type:=xlExpression, Formula1:="=$B10=""" & SuchBegriff & """"
        Bereich2.FormatConditions(1).Interior.ColorIndex = 3
        
        Bereich1.FormatConditions.Delete
        Bereich1.FormatConditions.Add Type:=xlExpression, Formula1:="=$B10=""" & SuchBegriff & """"
        Bereich1.FormatConditions(1).Interior.ColorIndex = 6
        
        Set Bereich1 = Range("C10", Cells(lngRow, lngCol))
        Bereich1.FormatConditions.Delete
        Bereich1.FormatConditions.Add Type:=xlExpression, Formula1:="=$B10=""" & SuchBegriff & """"
        Bereich1.FormatConditions(1).Interior.ColorIndex = 6
    End With

Application.ScreenUpdating = True
End Sub


Gruß Tino

Anzeige
AW: wo wird denn nach "leer" gesucht...
22.04.2009 08:54:16
Joachim
Hallo Tino,
weiss jetzt garnicht, welchen Code ich nehmen soll, welcher der Beste ist für mich, funktionieren tun sie ja alle :-) Im Moment nutze ich noch den:
With objTab
lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
Set Bereich = .Range("B10:B" & lngRow)
'Bereich.Interior.ColorIndex = xlColorIndexNone
If Application.WorksheetFunction.CountBlank(Bereich) > 0 Then
For Each Bereich In Bereich.SpecialCells(xlCellTypeBlanks)
.Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
Bereich.Interior.ColorIndex = 3
Next Bereich
End If
End With
Geht der auch unter 2007 ?.
Was muss ich denn ändern, wenn ich noch eine zweite Abfrage machen will:
Wenn Spalte C = "TEST" UND Spalte H = "", Dann diese Markierungen (wie seither)
Danke Tino und Gruss
Anzeige
AW: wo wird denn nach "leer" gesucht...
22.04.2009 15:30:21
Tino
Hallo,
Du brauchst nur die Formel die erstellt wird entsprechend anpassen.

"=IF(RC" & lngCol1 & "=""" & SuchBegriff & """,0,"""")"


Bei mir funktionieren beide Versionen unter xl2003 und 2007.

Sub Beispiel()
Dim lngRow As Long, lngCol As Long, lngCol1 As Long
Dim Bereich As Range
Dim objTab As Worksheet
Dim SuchBegriff As String

'Suchbegriff************* 
SuchBegriff = "Test"

'eventuell Namen anpassen 
Set objTab = ActiveSheet

'Bildschirmaktualisierung aus 
Application.ScreenUpdating = False
 
    With objTab
        'Suche letzte Zeile 
        lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
        'Suche letzte Spalte 
        lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
        'Bereich in B eingrenzen 
        Set Bereich = .Range("B10:B" & lngRow)
        'Merke Spalte aus Bereich 
        lngCol1 = Bereich.Column
        'Farben zurücksetzen in Spalte B 
        Bereich.Interior.ColorIndex = xlColorIndexNone
        'letzte Spalte bestimmen 
        Set Bereich = Bereich.Offset(0, .Columns.Count - lngCol1)
        'Formel einfügen 
        Bereich.FormulaR1C1 = "=IF(AND(RC" & lngCol1 & "=""" & SuchBegriff & """,RC8=""""),0,"""")"
        'prüfen ob der Wert 0 in der letzten Spalte vorkommt 
        If Application.WorksheetFunction.CountIf(Bereich, 0) > 0 Then
         'Schleife über alle Zellen mit dem Wert 0 
            For Each Bereich In Bereich.SpecialCells(xlCellTypeFormulas, 1)
             'Zeile gelb färben 
             .Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
             'Zelle rot färben 
             .Cells(Bereich.Row, lngCol1).Interior.ColorIndex = 3
            Next Bereich
        End If
       'Hilfsspalte löschen 
       .Columns(.Columns.Count).Delete
    
    End With
'Bildschirmaktualisierung ein 
Application.ScreenUpdating = True
End Sub


Gruß Tino

Anzeige
Hallo Tino,
22.04.2009 15:57:55
Joachim
Ich denke das passt soweit: habe nur noch versucht, der BEREICH anders zu definieren, also dass nicht die Spalte C (seitherB) gefärbt wird, (wo seither "Test" stand, sondern meine leere Zelle in der Spalte M.
Habe den Bereich herumgedreht, scheint aber nicht zu klappen, kannst Du sehen warum.
Also wenn C = "TEST" und M = "", dann M färben:
Dim lngRow As Long, lngCol As Long, lngCol1 As Long
Dim Bereich As Range
Dim objTab As Worksheet
Dim SuchBegriff As String
'Suchbegriff*************
'SuchBegriff = "Text"
'eventuell Namen anpassen
Set objTab = ActiveSheet
'Bildschirmaktualisierung aus
Application.ScreenUpdating = False
With objTab
'Suche letzte Zeile
lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
'Suche letzte Spalte
lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
'Bereich in B eingrenzen
Set Bereich = .Range("M10:M" & lngRow)
'Merke Spalte aus Bereich
lngCol1 = Bereich.Column
'Farben zurücksetzen in Spalte B
Bereich.Interior.ColorIndex = xlColorIndexNone
'letzte Spalte bestimmen
Set Bereich = Bereich.Offset(0, .Columns.Count - lngCol1)
'Formel einfügen
Bereich.FormulaR1C1 = "=IF(AND(RC13="""",RC" & lngCol1 & "=""" & "Text" & """),0,"""")"
'prüfen ob der Wert 0 in der letzten Spalte vorkommt
If Application.WorksheetFunction.CountIf(Bereich, 0) > 0 Then
'Schleife über alle Zellen mit dem Wert 0
For Each Bereich In Bereich.SpecialCells(xlCellTypeFormulas, 1)
'Zeile gelb färben
.Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
'Zelle rot färben
.Cells(Bereich.Row, lngCol1).Interior.ColorIndex = 3
Next Bereich
End If
'Hilfsspalte löschen
.Columns(.Columns.Count).Delete
End With
'Bildschirmaktualisierung ein
Application.ScreenUpdating = True
Sorry für das blöde Nachfragen :-(
Sonst Super, danke
Anzeige
AW: Hallo Tino,
22.04.2009 16:15:33
Tino
Hallo,
wenn ich Dich jetzt richtig verstanden habe, müsste dies so angepasst werden.
Sub Beispiel()
Dim lngRow As Long, lngCol As Long, lngCol1 As Long
Dim Bereich As Range
Dim objTab As Worksheet
Dim SuchBegriff As String

'Suchbegriff************* 
SuchBegriff = "Test"

'eventuell Namen anpassen 
Set objTab = ActiveSheet

'Bildschirmaktualisierung aus 
Application.ScreenUpdating = False
 
    With objTab
        'Suche letzte Zeile 
        lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
        'Suche letzte Spalte 
        lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
        'Bereich in B eingrenzen 
        Set Bereich = .Range("C10:C" & lngRow)
        'Merke Spalte aus Bereich 
        lngCol1 = Bereich.Column
        'Farben zurücksetzen in Spalte B 
        Bereich.Interior.ColorIndex = xlColorIndexNone
        'letzte Spalte bestimmen 
        Set Bereich = Bereich.Offset(0, .Columns.Count - lngCol1)
        'Formel einfügen 
        Bereich.FormulaR1C1 = "=IF(AND(RC" & lngCol1 & "=""" & SuchBegriff & """,RC13=""""),0,"""")"
        'prüfen ob der Wert 0 in der letzten Spalte vorkommt 
        If Application.WorksheetFunction.CountIf(Bereich, 0) > 0 Then
         'Schleife über alle Zellen mit dem Wert 0 
            For Each Bereich In Bereich.SpecialCells(xlCellTypeFormulas, 1)
             'Zeile gelb färben 
             .Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
             'Zelle rot färben 
             .Cells(Bereich.Row, 13).Interior.ColorIndex = 3
            Next Bereich
        End If
       'Hilfsspalte löschen 
       .Columns(.Columns.Count).Delete
    
    End With
'Bildschirmaktualisierung ein 
Application.ScreenUpdating = True
End Sub


Also es wird geprüft ob in C = "Text" steht und in M nichts, ist dies gegeben wird M rot.
Gruß Tino

Anzeige
JA, hast Du, Perfekt, Vielen Dank owT :-))
22.04.2009 16:49:29
Joachim
AW: Hallo Tino,
23.04.2009 09:06:19
Joachim
Hallo Tino,
wenn ich nicht nach leerern zellen suchen will, ist doch diese Zeile zuständig, oder
If Application.WorksheetFunction.CountBlank(Bereich) > 0 Then ...
Was ändere ich in der Zeile , wenn ich nicht nach leeren, sondern nach <>"BBS" suche will
Code war dieser :
Dim lngRow As Long, lngCol As Long
Dim Bereich As Range
Dim objTab As Worksheet
'eventuell Namen anpassen
Set objTab = ActiveSheet
'Spalte C
With objTab
'Suche letzte Zeile
lngRow = .Cells.Find("*", , xlValues, 2, 1, 2, False, False).Row
lngCol = .UsedRange(, .UsedRange.Columns.Count).Column
Set Bereich = .Range("C10:C" & lngRow)
Bereich.Interior.ColorIndex = xlColorIndexNone
If Application.WorksheetFunction.CountBlank(Bereich) > 0 Then
For Each Bereich In Bereich.SpecialCells(xlCellTypeBlanks)
.Range(.Cells(Bereich.Row, 1), .Cells(Bereich.Row, lngCol)).Interior.ColorIndex = 6
Bereich.Interior.ColorIndex = 3
Next Bereich
End If
End With
Danke Gruss
Joachim
Anzeige
Habs gefunden, danke owT
23.04.2009 12:48:22
Joachim

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige