409 Aufrufe
Gefragt in Tabellenkalkulation von jelena Mitglied (737 Punkte)
Hallo guten Tag, bräuchte wieder mal eure Hilfe.

vba wenn in Zelle F8, F9, F10 usw. =HEUTE()-10 und in Zelle K8, K9, K10 usw. die Zahl kleiner als 2 dann soll in Zelle K8, K9, K10 usw. der Text "fällig" erscheinen. Danke

17 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Jelena,

du willst den Zahlenwert in K8 wirklich mit dem Text "fällig" überschreiben?

Gruß

M.O.
0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)
Hallo M.O. ja wenn möglich, ich müsste da etwas ausprobieren. Danke
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Jelena,

kopiere das folgende Makro in ein allgemeines Modul:

Sub faellig()
Dim lngZeile As Long
Dim lngLetzte As Long

'letzte beschriebene Zeile in Spalte F feststellen
lngLetzte = ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Row

'alle Zeilen ab Zeile 8 durchlaufen
For lngZeile = 8 To lngLetzte
   If Cells(lngZeile, 6).Value = DateSerial(Year(Now), Month(Now), Day(Now) - 10) And Cells(lngZeile, 11).Value < 2 Then Cells(lngZeile, 11) = "fällig"
Next lngZeile

End Sub


Es wird nur "fällig" in die Zelle K geschrieben, wenn das Datum genau 10 Tage vor dem heutigem Datum liegt. Das kannst du aber ggf. leicht ändern.

Gruß

M.O.

0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)
Bearbeitet von jelena
Hallo M.O. guten Morgen, der Text "fällig" soll bei allen K Zellen erscheinen wo das Datum 10 Tage und vorher liegt ohne dass ich das Makro händisch ausführe. Danke
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Jelena,

eine Möglichkeit wäre, das Makro automatisch beim Öffnen der Arbeitsmappe ausführen zu lassen.

Kopiere dazu das folgende Makro in das VBA-Projekt der entsprechenden Arbeitsmappe:

Private Sub Workbook_Open()
Dim lngZeile As Long
Dim lngLetzte As Long

'Name der Tabelle anpassen!
With Worksheets("Tabelle2")
  'letzte beschriebene Zeile in Spalte F feststellen
  lngLetzte = .Cells(Rows.Count, 6).End(xlUp).Row

  'alle Zeilen ab Zeile 8 durchlaufen
  For lngZeile = 8 To lngLetzte
    If .Cells(lngZeile, 6).Value = DateSerial(Year(Now), Month(Now), Day(Now) - 10) And .Cells(lngZeile, 11).Value < 2 Then Cells(lngZeile, 11) = "fällig"
  Next lngZeile
End With

End Sub

Den Namen der Tabelle, die überprüft werden soll musst du natürlich auf deine Verhältnisse anpassen.

Falls nur die 10-Tage geprüft werden sollen, dann lösche in der IF-Abfrage den Teil

And .Cells(lngZeile, 11).Value < 2

Gruß

M.O.

0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)

Hallo M.O. bei diesem makro

Private Sub Workbook_Open()
Dim lngZeile As Long
Dim lngLetzte As Long

'Name der Tabelle anpassen!
With Worksheets("Tabelle2")
  'letzte beschriebene Zeile in Spalte F feststellen
  lngLetzte = .Cells(Rows.Count, 6).End(xlUp).Row

  'alle Zeilen ab Zeile 8 durchlaufen
  For lngZeile = 8 To lngLetzte
    If .Cells(lngZeile, 6).Value = DateSerial(Year(Now), Month(Now), Day(Now) - 10) And .Cells(lngZeile, 11).Value < 2 Then Cells(lngZeile, 11) = "fällig"
  Next lngZeile
End With

End Sub
kommt der Text nur bei 10 Tage vorher, es soll aber bei allen vorherigen Tagen zB. 01.01.2021 der Text "fällig" eingefügt werden. Danke
+1 Punkt
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Jelena,

ich bin von deiner Formel ausgegangen und da steht gleich.

Ändere die Zeile

If .Cells(lngZeile, 6).Value = DateSerial(Year(Now), Month(Now), Day(Now) - 10) And .Cells(lngZeile, 11).Value < 2 Then Cells(lngZeile, 11) = "fällig"

in

If .Cells(lngZeile, 6).Value <= DateSerial(Year(Now), Month(Now), Day(Now) - 10) And .Cells(lngZeile, 11).Value < 2 Then Cells(lngZeile, 11) = "fällig"

dann sollte das Makro wie gewünscht funktionieren.

Gruß

M.O.

0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)
Hallo M.O. es funktioniert. Besten Dank und schönen Tag.
0 Punkte
Beantwortet von jelena Mitglied (737 Punkte)
Bearbeitet von jelena

Hallo M.O. guten Tag, bitte um weitere Hilfe.

Private Sub Workbook_Open()
Dim lngZeile As Long
Dim lngLetzte As Long

'Name der Tabelle anpassen!
With Worksheets("Tabelle2")
  'letzte beschriebene Zeile in Spalte F feststellen
  lngLetzte = .Cells(Rows.Count, 6).End(xlUp).Row

  'alle Zeilen ab Zeile 8 durchlaufen
  For lngZeile = 8 To lngLetzte
    If .Cells(lngZeile, 6).Value = DateSerial(Year(Now), Month(Now), Day(Now) - 10) And .Cells(lngZeile, 11).Value < 2 Then Cells(lngZeile, 11) = "fällig"
  Next lngZeile
End With

End Sub

Wenn in Spalte J8, J9, J10 usw. die Zahl grösser als 100 ist, soll in Zelle K8, K9, K10 usw. kein Text "fällig" eingetragen werden.
Und wenn in Zelle F8, F9, F10 usw. ein neueres Datum eingetragen wird, soll der Text "fällig" in der Zelle K8, K9, K10 usw. wieder gelöscht werden. Danke
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Jelena,

wenn "fällig" nur bei Werten unter 100 erscheinen soll, dann ändere die Zeile

If .Cells(lngZeile, 6).Value = DateSerial(Year(Now), Month(Now), Day(Now) - 10) And .Cells(lngZeile, 11).Value < 2 Then Cells(lngZeile, 11) = "fällig"

in

If .Cells(lngZeile, 6).Value = DateSerial(Year(Now), Month(Now), Day(Now) - 10) And .Cells(lngZeile, 11).Value < 100 Then Cells(lngZeile, 11) = "fällig"

Zum Löschen des Wortes "fällig" kopiere das folgende Makro in das VBA-Projekt der betreffenden Tabelle:

Private Sub Worksheet_Change(ByVal Target As Range)

'nur bei Eingabe in Spalte F ausführen
If Not Intersect(Target, Range("F:F")) Is Nothing Then
    'Inhalt in Spalte K löschen, wenn eingegebenes Datum nicht älter als 10 Tage ist
    If Target.Value > DateSerial(Year(Now), Month(Now), Day(Now) - 10) Then Cells(Target.Row, 11).ClearContents
End If

End Sub

Gruß

M.O.

...