Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Wenn Zelle leer - Datum prüfen und vergleichen

Wenn Zelle leer - Datum prüfen und vergleichen
23.09.2015 08:46:46
reiner
Guten Morgen zusammen,
Ich habe ein Tabellenblatt mit dem ich ein Datum überwachen will.
Folgende Spalten gibt es :
Datum, Name, Betrag, Brief1, Brief2, Zahlung erfolgt
Das Makro soll jetzt folgendes prüfen :
Wenn die Zelle bei „ Zahlung erfolgt „ leer ist,
prüfe ob in Zelle bei „ Brief2 „ ein Datum steht,
wenn hier ein Datum steht, addiere 7 Tage dazu und vergleiche das „ NEUEDATUM „ mit den Datum HEUTE. Ist das NEUEDATUM gleich oder grösser als das Datum HEUTE zeige die Werte der Zellen in den jeweiligen Textboxen an !
Hier die Kurzform:
Ich möchte alle Mitglieder ( Daten ) angezeigt bekommen die 7 Tage nach Brief2 noch nicht bei Zahlung erfolgt ein Datum stehen haben.
Mein Makro bisher lautet :
Private Sub CommandButton1_Click()
Dim a As Date
a = Format(Date, "dd,mm,yyyy")
Set finden = ActiveSheet.Range("e2:e25 ")
For Each Zelle In finden
If Zelle.Value + 7 

Hoffe doch – es hat jemand die Zeit – Muße und Lust sich meines Problems anzunehmen. Vielen Dank vorab
Grüsse
Reiner

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn Zelle leer - Datum prüfen und vergleichen
23.09.2015 10:21:29
matthias
Hallo Reiner,
wenn du wirklich alle Zeilen aufgelistet haben möchtest, musst du die Werte an eine Listbox mittels AddItem übergeben. So wie dein Code jetzt ausschaut, wird dir immer nur die erste Zelle angegeben, denn du verlässt deine Suchschleife nach dem ersten Fund.
Lege dir dazu eine 6-spaltige Listbox an mit folgendem Code:
Sub CommandButton1_Click()
Dim rZelle As Range
ListBox1.Clear
With ListBox1
.AddItem "Name"
.List(.ListCount - 1, 1) = "Datum"
.List(.ListCount - 1, 2) = "Betrag"
.List(.ListCount - 1, 3) = "Brief1"
.List(.ListCount - 1, 4) = "Brief2"
.List(.ListCount - 1, 5) = "Fundort"
End With
For Each rZelle In Columns("F").SpecialCells(xlCellTypeBlanks) 'alle leeren Zellen in Spalte F
If IsDate(rZelle.Offset(0, -1).Value) Then ' Spalte E ist Datum?
If rZelle.Offset(0, -1).Value + 7 >= Date Then
With ListBox1
.AddItem rZelle.Offset(0, -4) 'name
.List(.ListCount - 1, 1) = rZelle.Offset(0, -5) 'datum
.List(.ListCount - 1, 2) = rZelle.Offset(0, -3) 'betrag
.List(.ListCount - 1, 3) = rZelle.Offset(0, -2) 'brief1
.List(.ListCount - 1, 4) = rZelle.Offset(0, -1) 'brief2
.List(.ListCount - 1, 5) = rZelle.Address       'Adresse
End With
End If
End If
Next rZelle
End Sub

Abrufen kannst du die Daten dann mit ListBox1.List(Zeilenindex, Spalteindex), wobei beide Indexe bei Null beginnen. Um alle Einträge im Makro weiterzuverarbeiten, kann man mit einer For-Schleife alle Einträge durchgehen. Zeilenindex 0 enthält hierbei die Überschriften, welche nicht berücksichtig werden müssen.
For x = 1 To ListBox1.ListCount
lg Matthias

Anzeige
AW: Wenn Zelle leer - Datum prüfen und vergleichen
23.09.2015 10:23:06
matthias
Ach, statt x sollte es Zeilenindex lauten.

AW: Wenn Zelle leer - Datum prüfen und vergleichen
24.09.2015 08:37:06
reiner
Hallo Matthias,
erstmal vielen Dank für deine Hilfe !
Ich habe den code etwas umgestrickt und jetzt funtioniert er in soweit, daß mir die Daten in meiner UserForm in den entsprechenden Textboxen angezeigt werden !
Anscheinend hab ich am Anfang vergessen zu erwähnen - daß jeder Fall "einzeln" in den Textboxen erscheinen soll. Leider wird nur der erste Fall / Fund angezeigt ! Wie kann ich - wenn ich den CommandButton wieder betätige, den nächsten Fall/Fund in die Textboxen einlesen ?
Hier mein aktueller Code :
Sub CommandButton1_Click()
Dim a As Date
Dim rzelle As Range
Dim zelle As Range
a = Format(Date, "dd,mm,yyyy")
For Each rzelle In Columns("F").SpecialCells(xlCellTypeBlanks) 'alle leeren Zellen in Spalte F
If IsDate(rzelle.Offset(0, -1).Value) Then ' Spalte E ist Datum?
rzelle.Offset(0, -1).Select
If ActiveCell.Value + 30 >= Date Then  ' hier ist die Differenz auf 30 tage erhöht !
TextBox1 = ActiveCell.Offset(0, -3) 'name
TextBox2 = ActiveCell.Offset(0, -4) 'datum
TextBox3 = ActiveCell.Offset(0, -2) 'betrag
TextBox4 = ActiveCell.Offset(0, -1) 'brief1
TextBox5 = ActiveCell               '.offset(0,1)    'brief2
End If
Exit For
End If
Next rzelle
'Hier müßte die Suche weiterlaufen - aber wie ?
End Sub

Vielen Dank für Deine / Eure Mühe vorab
Grüsse
Reiner

Anzeige
AW: Wenn Zelle leer - Datum prüfen und vergleichen
24.09.2015 12:02:14
matthias
Hallo Reiner,
na dann machen wir es einfach anders. Statt mit einer For-Schleife nutzen wir die Suchfunktion. Der Button "Weitersuchen" ist dir sicher bekannt, der lässt sich in VBA mit dem "After"-Parameter nachahmen. Wir suchen dabei nach der aktiven Zelle.
'Daten suchen und an TextBox übergeben
Private Sub CommandButton1_Click()
Dim rZelle As Range
Set rZelle = Columns("F").Find(What:="", After:=Cells(ActiveCell.Row, 6)) 'Suche leere Zelle in  _
Spalte F
If rZelle Is Nothing Then
MsgBox "Nichts gefunden, alles i.O.", , "Hinweis"
Else
If rZelle.Offset(0, -5) = "" Then 'Ende der Tabelle erreicht (Spalte A leer)
Cells(1, 5).Select
Call UserForm_Initialize
MsgBox "Nichts gefunden, oder Ende der Tabelle erreicht.", , "Hinweis"
Set rZelle = Columns("F").FindNext(After:=Cells(ActiveCell.Row, 6))
End If
If IsDate(rZelle.Offset(0, -1).Value) Then ' Spalte E ist Datum?
rZelle.Offset(0, -1).Select
With ActiveCell
If .Value + 30 >= Date Then             'hier ist die Differenz auf 30 tage erhöht ! _
TextBox1 = .Offset(0, -3)           'name
TextBox2 = .Offset(0, -4)           'datum
TextBox3 = Format(.Offset(0, -2), "0.00 €") 'betragA
TextBox4 = .Offset(0, -1)           'brief1
TextBox5 = .Value                   'brief2
TextBox6 = .Offset(0, 1)            'zahlung erfolgt
End If
End With
End If
End If
End Sub
'geänderte Daten übernehmen
Private Sub CommandButton2_Click()
With ActiveCell
If .Value + 30 >= Date Then             'hier ist die Differenz auf 30 tage erhöht ! _
.Offset(0, -3) = TextBox1           'name
.Offset(0, -4) = CDate(TextBox2)    'datum
.Offset(0, -2) = CCur(TextBox3)     'betragA
.Offset(0, -1) = CDate(TextBox4)    'brief1
.Value = CDate(TextBox5)            'brief2
.Offset(0, 1) = TextBox6            'zahlung erfolgt
End If
End With
End Sub
'Einstellungen beim Öffnen der Userform
Private Sub UserForm_Initialize()
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
End Sub

Vorsicht beim Suchen: Die Zelle, welche im After-Parameter angegeben wird, muss im Suchbereich liegen. Die Lösung dazu siehst du ja.
Was mich ehrlich gesagt stört ist das "ActiveCell". Ich arbeite ungern damit zws. Zellen hin- und herzuspringen und sie zu markieren, denn das ist ein unnötiger Schritt. Da du aber darauf bestehst, bin ich dabei geblieben.
lg Matthias

Anzeige
AW: Wenn Zelle leer - Datum prüfen und vergleichen
25.09.2015 08:50:29
reiner
Hallo Matthias,
langsam seh ich wohl den Wald vor lauter Bäumen nicht mehr - bzw ich steh aufm Schlauch !
Ich hab hier mal meine Datei hochgeladen
https://www.herber.de/bbs/user/100389.xlsm
schau sie Dir doch bitte einmal bei Gelegenheit an.
Dankeeee
Grüsse
Reiner

Anzeige
AW: Wenn Zelle leer - Datum prüfen und vergleichen
25.09.2015 16:10:32
matthias
Hallo Reiner,
stimmt, da fehlt auch was. Gestern hat es meiner Meinung nach funktioniert gehabt oder ich habe mich ungenügender Beispiele bedient.
'Daten suchen und an TextBox übergeben
Private Sub CommandButton1_Click()
Dim rZelle As Range
Set rZelle = Columns("F").Find(What:="", After:=Cells(ActiveCell.Row, 6)) 'Suche leere Zelle in  _
Spalte F
If rZelle Is Nothing Then
MsgBox "Nichts gefunden, alles i.O.", , "Hinweis"
Else
rZelle.Offset(0, -1).Select
If rZelle.Offset(0, -5) = "" Then 'Ende der Tabelle erreicht (Spalte A leer)
Cells(1, 5).Select
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
'TextBox6 = ""
MsgBox "Nichts gefunden, oder Ende der Tabelle erreicht.", , "Hinweis"
Exit Sub
End If
If IsDate(rZelle.Offset(0, -1).Value) Then ' Spalte E ist Datum
With ActiveCell
If .Value + 30 >= Date Then
TextBox1 = .Offset(0, -3)                   'name
TextBox2 = .Offset(0, -4)                   'datum
TextBox3 = Format(.Offset(0, -2), "0.00 €") 'betragA
TextBox4 = .Offset(0, -1)                   'brief1
TextBox5 = .Value                           'brief2
'TextBox6 = .Offset(0, 1)         'zahlung erfolgt
Else: Call CommandButton1_Click
End If
End With
Else: Call CommandButton1_Click
End If
End If
End Sub
Die Suche erfolgt immer ab der aktuell markierten Zelle, wenn du also die komplette Tabelle durchsuchen willst, solltest du die oberste Zelle markieren. Oder du drückst nach der Mitteilung "Ende Erreicht" einfach nochmal auf den Button und er fängt wieder von vorn an.
lg Matthias
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zelle leer prüfen und Datum vergleichen in Excel


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne den VBA-Editor (Alt + F11) und erstelle ein neues Modul.

  2. Code einfügen: Nutze den folgenden VBA-Code, um zu prüfen, ob eine Zelle leer ist und ob in einer anderen Zelle ein Datum steht:

    Private Sub CommandButton1_Click()
       Dim rZelle As Range
       Set rZelle = Columns("F").Find(What:="", After:=Cells(ActiveCell.Row, 6)) ' Suche leere Zelle in Spalte F
       If rZelle Is Nothing Then
           MsgBox "Nichts gefunden, alles i.O.", , "Hinweis"
       Else
           If IsDate(rZelle.Offset(0, -1).Value) Then ' Prüfen, ob Zelle Datum enthält
               ' Hier kannst du die Logik für die Weiterverarbeitung hinzufügen
           End If
       End If
    End Sub
  3. Datum überprüfen: Füge die Logik hinzu, um das Datum zu vergleichen, wie in den vorherigen Beiträgen beschrieben. Achte darauf, dass du mit Date arbeitest, um das aktuelle Datum zu erhalten.

  4. Daten anzeigen: Verwende eine Listbox oder Textbox, um die Daten anzuzeigen, wenn die Bedingungen erfüllt sind.


Häufige Fehler und Lösungen

  • Problem: Das Makro gibt nur die erste Zelle aus.

    • Lösung: Stelle sicher, dass du die Schleife korrekt implementierst und nicht nach dem ersten Fund die Schleife verlässt. Verwende Exit For nur, wenn du wirklich alle Daten durchlaufen hast.
  • Problem: Der ActiveCell springt hin und her.

    • Lösung: Vermeide die Verwendung von ActiveCell, indem du die Zellen direkt referenzierst. Dies verhindert unnötige Sprünge zwischen den Zellen.

Alternative Methoden

  • Excel-Funktionen nutzen: Statt VBA kannst du auch Excel-Formeln verwenden, um zu prüfen, ob eine Zelle leer ist. Zum Beispiel:

    =WENN(ISTLEER(F2); "Zelle ist leer"; "Zelle ist nicht leer")
  • Bedingte Formatierung: Nutze die bedingte Formatierung, um leere Zellen hervorzuheben, was die Visualisierung erleichtert.


Praktische Beispiele

  1. Datum prüfen: Wenn in Zelle E2 ein Datum steht und F2 leer ist, kannst du folgendes verwenden:

    If IsDate(Range("E2").Value) And IsEmpty(Range("F2").Value) Then
       ' Logik hier
    End If
  2. Datenvergleich: Um zu überprüfen, ob das Datum in E2 plus 7 Tage größer oder gleich heute ist:

    If Range("E2").Value + 7 >= Date Then
       ' Logik hier
    End If

Tipps für Profis

  • Fehlerbehandlung: Implementiere On Error Resume Next, um Fehler im Code zu ignorieren und die Ausführung fortzusetzen.

  • Performance optimieren: Schalte die Bildschirmaktualisierung aus (Application.ScreenUpdating = False), während das Makro läuft, um die Ausführung zu beschleunigen.

  • VBA-Tools: Nutze Tools wie Debug.Print, um Informationen während der Entwicklung zu protokollieren.


FAQ: Häufige Fragen

1. Wie kann ich in Excel auf leere Zellen prüfen? Verwende die IsEmpty-Funktion in VBA, um zu überprüfen, ob eine Zelle leer ist.

2. Wie kann ich ein Datum in Excel überprüfen? Du kannst die IsDate-Funktion verwenden, um zu prüfen, ob der Inhalt einer Zelle ein Datum ist.

3. Wie kann ich mehrere Daten in einer UserForm anzeigen? Nutze eine Listbox, um alle relevanten Daten aufzulisten, und implementiere eine Schleife, um sie einzeln anzuzeigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige