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

VBA leere Zeilen u Zellen überprüfen und ausgeben

VBA leere Zeilen u Zellen überprüfen und ausgeben
14.01.2015 14:58:50
Thomas

Hallo Leute,
mein Problem ist ich möchte aus einer beliebigen Excel-Datei das genaue Sheet auswählen und das Sheet auf einen Bereich (Bsp C20:F36) auf leeren Inhalt prüfen.
Ich kann dadurch jede beliebige Excel Datei wählen, der soll mir eine bestimmte Tabelle (Sheet) wählen und einen festgelegten Bereich (C20:F36) auf leere Zellen (kein Inhalt) prüfen. Zuerst sollen leere Zeilen nicht betrachtet werden. Danach sollen dann auf leere Zellen geprüft werden und am Ende ausgeben werden.
Für die erste Prüfung soll er eine „ganze“ Zeile in dem den Bereich (C20:F36) prüfen. Wenn Zeilen im Bereich leer sind, sind diese für mich nicht mehr wichtig. Ich betrachte also also 36-20=17 Zeilen, beispielsweise sind davon 5 leer (Grün markiert im Screenshot), dies kann je nach Sheet varrieren. Ich habe also 16-5=12 Zeilen die ich nun betrachte.
Im zweiten Schritt soll nun geprüft werden, ob die Zeilen bzw. Tabelle leere Zellen (rot markiert) aufweisen. Diese soll er mir am Ende ausgeben, am besten mit dem Namen der Spalte.
Konkretes Bsp:
Ich öffne die Excel Datei "Fahrzeugliste" aus der soll das Programm nun immer "Lenkrad" auswählen. Nun soll das Programm lediglich im Zellenbereich C20:F36 auf komplett leere Zeilen prüfen. Diese soll das Programm dann nicht mehr betrachten. Im nächsten Schritt soll das Programm dann im Zellenbereich ohne die leeren Zeilen auf leere Zellen prüfen. Am Ende soll beispielsweise eine Auflistung der leeren Zellen ausgegeben (aufgelistet) werden. Die Ausgabe der leeren Zellen soll so vereinfacht werden, dass der Spaltenname der Zelle genügt und die Anzahl der leeren Zellen dieser Spalte (Bsp: Airbag 3 leere Zellen, Schrauben 1 leere Zelle etc. oder keine leere Zellen)
Im Anhang ist der Code den ich schon habe und ein Screenshot wie die Tabelle (Sheet aussieht)
Userbild
Vielen Dank Ihr würdet mir sehr viel helfen, ich verzweifle schon...
Lg Thomas

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA leere Zeilen u Zellen überprüfen und ausgeben
14.01.2015 15:01:14
Thomas
Hier noch der versprochene Code:
Sub LeereZellen()
Dim i As Integer
Dim n As Integer
Dim k As Integer
Dim l As Integer
Dim strTemp As String
Dim strColumn As String
Dim a%
a = Application.WorksheetFunction.CountA([C20:F36])
If a > 0 Then
'MsgBox "nicht Leer"
For i = 19 To 36
For n = 0 To 3
Select Case n
Case 0: strColumn = "C"
Case 1: strColumn = "D"
Case 2: strColumn = "E"
Case 3: strColumn = "F"
' Case 4: strColumn = "G"
' Case 5: strColumn = "H"
' Case 6: strColumn = "I"
' Case 7: strColumn = "J"
' Case 8: strColumn = "K"
' Case 9: strColumn = "L"
End Select
If Sheets("Lenkrad").Range(strColumn & i) = "" Then
strTemp = strTemp & strColumn & i & vbCrLf
End If
Next
Next
Call MsgBox("Die folgenden Zellen sind leer" & vbCrLf & vbCrLf & strTemp,  _
vbOKOnly, "Leere Zellen")
Else: MsgBox "Leer"
End If
End Sub

LG
Thomas

Anzeige
Fragen zur Datentabelle
14.01.2015 20:21:58
Frank
Hallo Thomas,
(1) Sind komplett leere Zellen immer am Ende der Tabelle?
(2) Kann es vorkommen, dass alle Datenfelder leer sind?
(3) Sind diese Daten der einzige Inhalt dieser Blätter oder kann nach der Tabelle noch was kommen?
Falls (2) nicht zutrifft, kannst Du Dir schonmal a = Application.WorksheetFunction.CountA([C20:F36]) und die darauffolgende umschliessende IF...THEN-Konstruktion sparen.
(1) und (3) sind dabei im Zusammenhang zu betrachten. Falls (1) nicht zutrifft, (3) aber wohl, geht's so:
Sub LeereZellen()
Dim i As Integer
Dim n As Integer
Dim k As Integer
Dim l As Integer
Dim strTemp As String
Dim strColumn As String
Dim a%
EZ = Right(Sheets("Lenkrad").UsedRange.Rows.Address, 2)
Z1 = 0
Z2 = 0
Z3 = 0
Z4 = 0
For n = 0 To 3
For i = 19 To EZ
Select Case n
Case 0: strColumn = "C"
If Sheets("Lenkrad").Range(strColumn & i) = "" Then
Z1 = Z1 + 1
End If
Case 1: strColumn = "D"
If Sheets("Lenkrad").Range(strColumn & i) = "" Then
Z2 = Z2 + 1
End If
Case 2: strColumn = "E"
If Sheets("Lenkrad").Range(strColumn & i) = "" Then
Z3 = Z3 + 1
End If
Case 3: strColumn = "F"
If Sheets("Lenkrad").Range(strColumn & i) = "" Then
Z4 = Z4 + 1
End If
End Select
Next
Next
Dummy = MsgBox("Spalte C " & Z1 & " leere Zellen" & vbCrLf & _
"Spalte D " & Z2 & " leere Zellen" & vbCrLf & _
"Spalte E " & Z3 & " leere Zellen" & vbCrLf & _
"Spalte F " & Z4 & " leere Zellen" & vbCrLf, vbOKOnly, "Leere Zellen")
End Sub
Grüsse,
Frank

Anzeige
AW: Fragen zur Datentabelle
15.01.2015 15:10:38
Thomas
Hallo Frank,
danke dir, es klappt gut.
Jedoch ist meine Tabelle etwas größer (siehe Anhang).
Ich wollte jedoch nicht alle Spalten ausgeben lassen, nur die die "leere Zellen" haben (s.Anhang).
Die die Leere Zeilen haben so wie am ende sollen nicht beachtet werden wie du sagtest in (1)
Zudem wird der Code sehr lang da ich jede Spalte (31 mal hinschreiben muss).
Könnte man da auch eine For-Schleife einfügen?
Ich bekomme täglich diese Excel Datei (s.Anhang) und will prüfen ob diese meinen Sstandardanforderungen genügen:
Ich will also auch prüfen, ob die Spaltenlänge von 31 stimmt, wenn nicht "Fehlermeldung"
Den Bereich der mir wichtig ist ist (C19:AG43). Ich habe es mal im Screenshot mit einen grauen Hintergrund markiert.
Der Anhang hier:
Userbild
Vielen Dank...

Anzeige
AW: Fragen zur Datentabelle
15.01.2015 15:11:52
Thomas
Hallo Frank,
danke dir, es klappt gut.
Jedoch ist meine Tabelle etwas größer (siehe Anhang).
Ich wollte jedoch nicht alle Spalten ausgeben lassen, nur die die "leere Zellen" haben (s.Anhang).
Die die Leere Zeilen haben so wie am ende sollen nicht beachtet werden wie du sagtest in (1)
Zudem wird der Code sehr lang da ich jede Spalte (31 mal hinschreiben muss).
Könnte man da auch eine For-Schleife einfügen?
Ich bekomme täglich diese Excel Datei (s.Anhang) und will prüfen ob diese meinen Sstandardanforderungen genügen:
Ich will also auch prüfen, ob die Spaltenlänge von 31 stimmt, wenn nicht "Fehlermeldung"
Den Bereich der mir wichtig ist ist (C19:AG43). Ich habe es mal im Screenshot mit einen grauen Hintergrund markiert.
Der Anhang hier:
Userbild
Vielen Dank...

Anzeige
Array wäre eine Möglichkeit
15.01.2015 18:49:03
Frank
Hallo Thomas,
wenn ich Hilfe zu einer Frage gebe, versuche ich immer, die vorhandene Struktur weitgehend beizubehalten, vor allem um den Fragesteller nicht zu überfordern.
Wenn Du weisst, was eine Arrayvarable ist - das wäre eine Lösung, ohne den Code komplett umzubauen.
Statt Z1, Z2, ... als Variablen einzuführen, nimmt man eine namens Z(n) her. Das n dimensioniert man entsprechend des maximalen n (Anzahl Spalten).
Was Du Dir damit sparen könntest, ist das SELECT CASE, müsstest aber Cells(Zeile, Spalte) verwenden, statt Range("Spalte:Zeile"). Mit der MsgBox wird's dann aber blöd, weil Du da alle Z(n) auflisten musst.
Sub LeereZellen()
Dim i As Integer
Dim n As Integer
Dim k As Integer
Dim l As Integer
Dim strTemp As String
Dim Z(4)
Dim a%
EZ = Right(Sheets("Lenkrad").UsedRange.Rows.Address, 2)
For n = 0 To 3
For i = 19 To EZ
If Sheets("Lenkrad").cells(i, n+3) = "" Then
Z(n) = Z(n) + 1
End If
Next
Next
Dummy = MsgBox("Spalte C " & Z(0) & " leere Zellen" & vbCrLf & _
"Spalte D " & Z(1) & " leere Zellen" & vbCrLf & _
"Spalte E " & Z(2) & " leere Zellen" & vbCrLf & _
"Spalte F " & Z(3) & " leere Zellen" & vbCrLf, vbOKOnly, "Leere Zellen")
End Sub
Das ist nicht getestet und noch gemäss der Tabelle Deines ersten Postings.
Grüsse,
Frank

Anzeige
AW: Array wäre eine Möglichkeit
15.01.2015 21:13:27
Thomas
Hallo Frank,
ich habe das hier:

Public Sub TestLeer()
Dim a%
a = Application.WorksheetFunction.CountA([C19:AG43])
If a > 0 Then
MsgBox "nicht Leer"
Else: MsgBox "Leer"
End If
End Sub


Das könnte man doch damit abfrühstücken und schauen welche sind leer und die dann ausgeben lassen???
was meinst du?

Die MsgBox lässt leider bzw. zeigt nicht mehr als 26 Zeilen. Im Code kann man sie dann nacheinander schreiben jedoch werden nur 26 ausgegeben. Kann man die MsgBox vergrößern?
Ansonsten wäre es schöner dann nur die leeren Zellen anzeigen lassen im Screenshot wären das nur 4 anstatt alle anzuzeigen!?

Anzeige
Application.WorksheetFunction.CountA
15.01.2015 23:02:06
Frank
Hallo Thomas,
die Schwierigkeit mit dieser Funktion besteht ja eben darin, dass sie Dir nicht zurückgibt, wo leere Zellen sind. Die Aussage des Vergleichs If a > 0 Then ist lediglich, ob irgendwo in dem Bereich was drinsteht oder alles leer ist.
Wenn Dir die Ausgabe der MsgBox zu unübersichtlich ist, weil da auch ein oder zweimal "Spalte n 0 leere Zellen" drinstehen könnte (das wäre bei meinem letzten Codebeispiel und der zugehörigen Tabelle der Fall), dann kannst Du Dir auch den Ausgabestring für die MsgBox mit SELECT CASE zusammenbasteln
Ausgabe = ""
for n =0 to 3
W = Z(n)
Select case W
Case 0
Ausgabe = Ausgabe
Case Else
Ausgabe = Ausgabe & "Spalte " & n + 3 & Z(n) & " leere Zellen" & vbCrLf
End Select
next
Dummy = MsgBox(Ausgabe, vbOKOnly, "Leere Zellen")

Möglich wäre natürlich auch, die ganze Aufsummiererei bleiben zu lassen, mit der UsedRange-Eigenschaft festzustellen, wo die komplett leeren Zeilen anfangen und dann den vorhergehenden Bereich mit zwei geschachtelten Schleifen (eine für die Zeilen, eine für die Spalten) auf leere Zellen abzusuchen und dann die Treffer der Suche als Zelladresse in einem Ausgabestring zu sammeln.
Nur - wie im letzten Post geschrieben - ich halte mich möglichst an die Vorgaben. Wenn ich das nicht tun würde, müsste ich mich fragen: Ja, und was tust Du mit einer MsgBoxausgabe, die z.B. lautet
Spalte D 5 leere Zellen
Spalte F 3 leere Zellen
Spalte I 2 leere Zellen
Spalte J 7 leere Zellen
Spalte L 3 leere Zellen
Spalte AA 9 leere Zellen
Spalte AG 7 leere Zellen

Damit hast Du nichts gewonnen. Einfärben wäre da sinnvoller - für meine Begriffe. Aber die Wege des IT-Herrn sind unergründlich und was weiss ich, warum Du es so brauchst, wie beschrieben?
Grüsse,
Frank

Anzeige
AW: Application.WorksheetFunction.CountA
16.01.2015 09:09:12
Thomas
Hallo Frank,
daich habe einen vorgegebenen bereich von C18:AG43 wenn ich jedoch

EZ = Right(Sheets("Lenkrad").UsedRange.Rows.Address, 2)
nehme und die Forschleife

For i = 19 To EZ
dann nimmt er nicht meinen grauen bereich sondern geht die Tabelle bin nach unten. Leider geht meine Tabelle nicht bis ganz nach unten, so dass ein Beiswpielergebnis wie ich es im Anhang angehangen habe Spalte C bis L zb 7 leere Zellen hat. Wenn ich deinen Code genauso ausführe dann zählt er die weiteren zeilen mit bis zum ende der Tabelle (also geht über meinen grauen bereich hinaus). Ich habe daher EZ rausgelassen und selber meinen Bereich definiert.
Ich möchte ja gerne erstmal prüfen wo die Leeren zeilen im grauen Bereich beginnen, diese brauche ich ja dann nicht mehr betrachten. Danach sollen die Zeilen wo was drin ist geprüft werden ob dort Zellen leer sind (wie im Anhang). Die leeren Zellen soll er mir dann einfach ausgeben.
Vielleicht habe ich es jetzt besser erklärt?
Vielen Dank für deine Mühe Frank

Anzeige
Tebellenbeschreibung
16.01.2015 09:29:05
Thomas
Hi Frank,
Die Tabelle hat einen vorgegeben Bereich der liegt immer bei C19:AG43.
Die Tabelle ist leider nicht immer gleich befüllt, mal mehr mal weniger auch die Anzahl der Zeilen mal mehr mal weniger befüllt. (Die Tabelle ändert sich täglich)
Im 1.Schritt soll das Programm den Bereich (C19:AG43) scannen und schauen bis zu welchen (kleineren) Bereich dieser befüllt ist, es reicht schon, dass nur eine Zelle in der Zeile befüllt ist, alle komplett leeren Zeilen im Bereich (C19:AG43) werden dann nicht mehr beachtet.
Im 2.Schritt sollen dann die Leeren Zellen im (kleineren) Bereich lokaliesiert werden. Es reicht wieviel in welcher Spalte sie liegen.
vllt. können wir uns per Emai mal austauschen???

Anzeige
Mappe hochladen
16.01.2015 13:08:52
Frank
Hallo Thomas,
eMail ist keine gute Idee. Hier im Forum ist mehr versammelter Sachverstand, als das vor zwei Rechnern der Fall sein könnte.
An dieser Stelle wär's vielleicht nicht schlecht, wenn Du die Tabelle, die Du einige Beiträge weiter oben als Bild dargestellt hast, mal hochlädst. Da kann man dann was probieren. Ich hab schon eine Vorstellung, aber dazu müsste ich mir erst ne Beispieltabelle basteln.
Das Ermitteln der komplett leeren Zeilen ist das Problem. Das sollte eigentlich UsedRange.Rows.Address erledigen. Wenn das nicht funktioniert, heisst das, da sind irgendwo noch Zellen im eigentich leeren Bereich in Benutzung (Formeln vielleicht?). Also muss man sich die Originaltabelle anschauen.
Grüsse,
Frank

Dann so...
16.01.2015 14:33:13
Frank
Hallo Thomas,
Sub LeereZellen()
Dim Z(34)   'Arrayvariablen müssen dimensioniert werden
'Durchlaufen aller Spalten von unten nach oben, wann Daten beginnen
'grösste Zeilennummer merken
For i = 3 To 33
Z1 = 43
VW = 43
Do While Sheets("Lenkrad").Cells(Z1, i).Value = ""
Z1 = Z1 - 1
Loop
If Z1 < VW Then
VW = Z1
End If
Next
'Im übriggebliebenen Bereich leere Zellen spaltenweise suchen
'Arrayvariablen aufsummieren
For n = 3 To 33
For i = 19 To VW
If Sheets("Lenkrad").Cells(i, n) = "" Then
Z(n) = Z(n) + 1
End If
Next
Next
'Zusammenstellen des Ausgabestrings
Ausgabe = ""
For n = 3 To 33
W = Z(n)
Select Case W
Case 0
Ausgabe = Ausgabe
Case Else
Ausgabe = Ausgabe & "Spalte " & n & " " & Z(n) & " leere Zellen" & vbCrLf
End Select
Next
Dummy = MsgBox(Ausgabe, vbOKOnly, "Leere Zellen")
End Sub
Wobei ich mir immer noch die Frage stelle, warum eine MsgBox besser ist, als Einzufärben.
Grüsse,
Frank

Leere Zellen farbig hervorheben???
17.01.2015 16:12:42
Thomas
Hallo Frank,
das klappt gut.
Du meinst mit einfärben, dass die leeren Zellen bsp. rot markiert sind???
das wäre auch gut...
Im Bereich des leere Zellen suchens müsste man dann eine Anweisung haben die die zellen rot bzw. farbig macht richtig?
Vielen Dank
Lg
Thomas

AW: Leere Zellen farbig hervorheben???
18.01.2015 10:00:54
Hajo_Zi
Hallo Thomas,
was ist der Unterschied zwischen Rot und Farbig?
Ich hätte ja die bedingte Formatierung benutzt.

AW: Leere Zellen farbig hervorheben???
18.01.2015 23:01:27
Frank
Hallo Thomas,
ja genau. Statt Z(n) = Z(n) + 1 schreibst Du
    With Sheets("Lenkrad").cells(i,n).Interior
.ColorIndex = 3
.Pattern = xlSolid
End With

dann färbt sich die leere Zelle rot. Und den Teil "Zusammenstellen des Ausgabestrings" und die MsgBox kannst Du dann ganz weglassen.
Grüsse,
Frank

AW: Leere Zellen farbig hervorheben???
19.01.2015 12:02:35
Thomas
Hallo Frank,
das klappt schon gut, leider aber nicht wenn sich die größe der Daten der Tabelle ändert.
Sprich wenn ich eine weitere Zeilen einfüge oder wegnehme. Die Fülle der Tabelle ist daher variable (A19:??), der Bereich jedoch (grauer bereich) nicht, sondern fest (C19:AG43).
Ich bekomme genau so eine Liste mit den vorgegebenen Bereich, jedoch ändern sich die Datenmengen.
Besipeilsweise kann es sein, dass eine Datei bzw. Tabelle nur 6 Zeilen ausgefüllt sind inklusive dann einige leere Zellen. Ein anderes mal sind es mehr Zeilen oder weniger mit leere Zellen. Es reicht auch schon wenn nur 1 Zelle in einer Zeile befüllt ist, damit diese Zeile nicht als leer gilt.
In dem Besipiel bzw. dem Code den ich von dir ausgeführt habe funktioniert es für das Beispiel was ich hochgeladen habe.
Sobald also nur in einer Zeile der Tabelle im Bereich des grauen ausgefüllt ist sollte der Rest der Tabelle im extremfall alle spalten der Zeile anzeigen bzw markieren oder ausgeben.
Ich hoffe du weißt was ich meine?
Also ich habe einen vorgegebenen Bereich (grauer Bereich) und die Datenmenge ("Daten"). Individuell ändert sich die Datenmenge, sodass die Tabelle mal mehr oder weniger Zeilen besitzt. Darin sind natürlich widerum Zellen die leer sind. Ich glaube dort in deinem Code muss noch eine Abfrage eingebaut werden was prüft, wo nur leere Zeilen (also x kleiner 1 sobald 1 Zelle in einer Zeile befüllt ist gilt sie nicht mehr als leer Zeile, sondern muss im Bereich der 2 Prüfung auf leere Zellen beachtet werden) sind, diese dann ausschließt und den Bereich mit "Daten" betrachtet. Die weitere Prüfung bzw. der Schritt 2, dass die leeren Zellen dann farbig oder ausgegeben werden hast du ja schon richtig.
Also 1.Schritt ist, finde den kleineren Bereich aus (A19:AG43 Max Bereich) - Also betrachte alle Zeilen mit wo Daten drinne stehen und betrachte nicht alle komplett leere Zeilen.
2. Schritt Finde aus dem kleineren Bereich die leeren Zellen.
Beste Grüße
Thomas
Beste Grüße
Thomas

AW: Leere Zellen farbig hervorheben???
19.01.2015 15:43:34
fcs
Hallo Thomas,
ich hab dir mal 2 Makros erstellt.
Makro1
Die leeren Zellen werden fix mit Farbe formatiert
Makro2:
Der Zellbereich wird mit einer bedingten Formatierung hinterlegt.
Gruß
Franz
'Erstellt unter Excel 2010 deutsch
Sub Lenkrad_Leere_in_Rot()
Dim wks As Worksheet, rngRow As Range, rngZelle As Range, Farbe As Long
Set wks = ActiveWorkbook.Worksheets("Lenkrad")
Farbe = 255 'Colorwert der Markierfarbe 255 = rot
Application.ScreenUpdating = False
With wks.Range("C19:AG43") 'Bereich ggf. anpassen
.Interior.ColorIndex = xlColorIndexNone
For Each rngRow In .Rows
If Application.WorksheetFunction.CountA(rngRow) > 0 Then
For Each rngZelle In rngRow.Cells
If IsEmpty(rngZelle) Then
rngZelle.Interior.Color = Farbe
End If
Next
End If
Next rngRow
End With
Application.ScreenUpdating = True
End Sub
Sub Lenkrad_Datenbereich_bedingteFormatierung()
Sheets("Lenkrad").Select
Range("C19:AG43").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=UND(ZÄHLENWENN($C19:$AG19;""<>"")>0;ISTLEER(C19))"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255 'rot
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("C19").Select
End Sub

AW: Leere Zellen farbig hervorheben???
19.01.2015 16:18:56
Thomas
Hallo Franz,
das ist genau das was ich brauchte, vielen Dank!!!

AW: Leere Zellen farbig hervorheben???
20.01.2015 10:41:34
Thomas
Hallo Frank,
mal noch eine Fragen:
Die beiden Makros funktionieren auf Excel2010 wunderbar!!!
Jedoch bekomme ich, wenn ich die Tabelle von außerhalb bekomme eine Fehlermeldung.
Kann es an der Version (Excel 2003) liegen?
Der meckert immer bei

.Interior.ColorIndex = xlColorIndexNone

Wahrscheinlich nicht kompatibel zu älteren Excel Versionen!?
Gibt es da eine alternative?
Beste Grüße
Thomas

AW: Leere Zellen farbig hervorheben???
20.01.2015 12:01:27
fcs
Hallo Thomas,
diese Anweisung sollte unter Excel 2003 eigentlich funktionieren, denn die Methode, die Zellfarbe via Colorindex einzustellen, wird schon seit den 90er Jahren verwendet.
Probleme könnten verbundene Zellen bereiten.
Da ich keine 2003 Version habe kann ich leider nicht testen.
Gruß
Franz

AW: Leere Zellen farbig hervorheben???
20.01.2015 14:50:15
Thomas
Hallo Frank,
kann man auch Abhängigkeiten von Spalten bzw. der Zellen prüfen?
Beispiel:
Wenn in Spalte N (Spaltenname 12) die Zellen (bsp.:cell(14,20)) nicht befüllt ist eine oder mehrere dieser Spalte N(Spaltenname 12) nicht befüllt sind (also mehrere Zellen in dieser gleichen Spalte , dann können bzw sollten die Zellen in den spalten VW, X AG auch nicht befüllt sein. Alles aber ausgegangen von Spalte (N).
Ich habe dir mal ein Beispiel angehangen.
Also ich habe dies mal farblich in der Tabelle gemacht.
Wichtig alles "ausgegangen" von Spalte M,N und O - diese habe ich fett gemacht. Die nicht fett sind, sind abhängig von den fett markierten, natürlich für die jeweiligen farben passend.
Steht also etwas in spalte N so müssen alle spalten die danach abhängig sind auch ausgefüllt sein, fehlt eine so wird wie im Makro davor verfahren, er soll dann dies rot markieren.
Hier einmal die Tabelle und ein Screenshot wie es genau sein sollte.
Userbild
https://www.herber.de/bbs/user/95123.xlsx
In Zeile 28 soll er die Zellen rot markieren , weil in Spalte davor befüllt worden ist.
So sollte es sich dann verhalten.
Die Farben symbolisieren die Abhängigkeit ausgegangen von den "farblich fetten"

AW: Leere Zellen farbig hervorheben???
20.01.2015 17:52:57
fcs
Hallo Thomas,
solche Prüfungen für Spalten/Spaltenblöcke können schnell kompliziert werden.
Gruß
Franz
'Erstellt unter Excel 2010 deutsch
Sub Leere_in_Lenkrad_Rot_neu()
Dim wks As Worksheet, rngRow As Range, rngZelle As Range, Farbe As Long
Set wks = ActiveWorkbook.Worksheets("Lenkrad")
Farbe = 255 'Colorwert der Markierfarbe 255 = rot
Application.ScreenUpdating = False
With wks.Range("C19:AG43") 'Bereich ggf. anpassen
.Interior.ColorIndex = -4142 'xlColorIndexNone
For Each rngRow In .Rows
If Application.WorksheetFunction.CountA(rngRow) > 0 Then
For Each rngZelle In rngRow.Cells
Select Case rngZelle.Column
Case 13 'Spalte M
If IsEmpty(rngZelle) Then
If fncCheckLeer(wks, rngZelle.Row, Array(16, 17, 18, 32)) = True Then
'alles ok
Else
'Zelle ist leer - mindestens eine der abhängigen Zellen ist ausgefüllt
rngZelle.Interior.Color = Farbe
End If
End If
Case 16, 17, 18, 32 'Spalte P. Q, R und AF
If Not IsEmpty(wks.Cells(rngZelle.Row, 13)) And IsEmpty(rngZelle) Then
rngZelle.Interior.Color = Farbe
End If
Case 14 'Spalte N
If IsEmpty(rngZelle) Then
If fncCheckLeer(wks, rngZelle.Row, Array(19, 20, 21)) = True Then
'alles ok
Else
rngZelle.Interior.Color = Farbe
End If
End If
Case 19, 20, 21 'Spalte S, T und V
If Not IsEmpty(wks.Cells(rngZelle.Row, 14)) And IsEmpty(rngZelle) Then
rngZelle.Interior.Color = Farbe
End If
Case 15 'Spalte O
If IsEmpty(rngZelle) Then
If fncCheckLeer(wks, rngZelle.Row, Array(22, 23, 24, 33)) = True Then
'alles ok
Else
rngZelle.Interior.Color = Farbe
End If
End If
Case 22, 23, 24, 33 'Spalte W, X, Y und AG
If Not IsEmpty(wks.Cells(rngZelle.Row, 15)) And IsEmpty(rngZelle) Then
rngZelle.Interior.Color = Farbe
End If
Case Else
If IsEmpty(rngZelle) Then
rngZelle.Interior.Color = Farbe
End If
End Select
Next
End If
Next rngRow
End With
Application.ScreenUpdating = True
End Sub
Function fncCheckLeer(wks As Worksheet, ByVal Zeile As Long, arrSpalten As Variant) As Boolean
'Prüft, ob alle Spalten im Array in der Zeile leer sind
Dim intSpalte As Integer
fncCheckLeer = True
For intSpalte = LBound(arrSpalten) To UBound(arrSpalten)
If Not IsEmpty(wks.Cells(Zeile, arrSpalten(intSpalte))) Then
fncCheckLeer = False
Exit For
End If
Next
End Function

Danke klappt
21.01.2015 20:15:06
Thomas
Hallo Franz,
danke das klappt sehr gut.
Ich lasse dich erstmal in Ruhe mit meinen Fragen und habe in der Zwischenzeit viel über VBA gelernt.
Die ein oder andere Frage kommt noch bestimmt von mir!!!!
Lg
Thomas

341 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige