Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel 2013 - DATEDIF / DateDiff
#1
Hallo zusammen,

die Zellformel DATEDIF macht mich wahnsinnig weil sie funktioniert bei mir nicht mehr.
Nach ausgiebiger Suche ohne Ergebnis bin ich über eine Funktion gestolpert die mir per VBA eine Datumsdifferenz berechnet.

Zell-Formel: = TestDates(H1; pDate2)

Code:
Function TestDates(pDate1 As Date, pDate2 As Date) As Long
 TestDates = DateDiff("m", pDate1, pDate2)
End Function

Für pDate1 habe ich einen sich nicht veränderbaren Wert aus einer Zelle.
Den zweiten Datumswert will ich aus einem benannten, veränderbaren Bereich ermitteln. Der Wert steht in der letzten nicht leeren Zelle des Bereiches und kann mit der folgenden Funktion ermittelt werden:

Code:
Sub LetzterWertInBereich()
 Run "LetzteBenutzteZelle", 1
 If Not pLetzteZelle Is Nothing Then
   MsgBox pLetzteZelle.Address
   MsgBox pLetzteZelle.Column
 Else
   MsgBox "Der Bereich ist leider leer"
 End If
 Set pLetzteZelle = Nothing
End Sub

Function LetzteBenutzteZelle(lWSIndex As Long, Optional strColumn As String) As Range
 If strColumn = vbNullString Then
   With ActiveSheet.Range("Datumsraster")
     Set pLetzteZelle = .Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
       xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
   End With
 Else
   With ActiveSheet
     Set pLetzteZelle = .Cells(.Rows.Count, strColumn).End(xlUp)
   End With
 End If
End Function

So weit so gut, aber wie bekomme ich jetzt den ermittelten Wert in meine Zell-Formel?
Oder gibt es eine einfachere Möglichkeit eine Datumsdifferenz zu ermitteln wobei das zweite Datum sich immer in einer anderen Zelle eines Bereichs befinden kann?

Für einen Tipp wäre ich dankbar!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#2
Hi Erich,

mir erschließt sich nicht, wieso DATEDIF in XL2013 nicht funktionieren soll. Was genau geht denn nicht? Bin jetzt nur am Handy, werd' dir also kein Beispiel posten können.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#3
Hi Günther,

ich bekomme als Ergebnis immer nur dies #####
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#4
Hi,

mal ganz profan: vergrößere deine Spaltenbreite. Wenn's das nicht war, stell ein Beispiel vor, bei dem der Fehler auftritt.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#5
Hi Günter,

auch bei breiterer Spalte das selbe Ergebnis.
Zwischenzeitlich hat es mal funktioniert und dann wieder nicht. Es nervt.

Ich habe es jetzt geschafft per VBA zu lösen. Hier mal die Rohversion die ich gebastelt habe.

Code:
Public pLetzteZelle As Range
Public letzterWert

Sub AnzahlMonate()
 Dim pDate1 ' As Date
 
 pDate1 = Range("H1").Value
 Call LetzterWertInBereich
 
 letzterWert = pLetzteZelle.Address
 letzterWert = Range(letzterWert).Value
 
 Resultat = DateDiff("m", pDate1, letzterWert)
 ActiveSheet.Range("Anzahl_Monate").Value = Resultat
End Sub

Sub LetzterWertInBereich()
 Run "LetzteBenutzteZelle", 1
 If Not pLetzteZelle Is Nothing Then
   letzterWert = pLetzteZelle.Address
   'MsgBox pLetzteZelle.Address
   'MsgBox pLetzteZelle.Column
 Else
   MsgBox "Der Bereich ist leider leer"
 End If
 'Set pLetzteZelle = Nothing
End Sub

Function LetzteBenutzteZelle(lWSIndex As Long, Optional strColumn As String) As Range
 If strColumn = vbNullString Then
   With ActiveSheet.Range("Einkaufsraster")
     Set pLetzteZelle = .Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
       xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
   End With
 Else
   With ActiveSheet
     Set pLetzteZelle = .Cells(.Rows.Count, strColumn).End(xlUp)
   End With
 End If
End Function
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#6
Hallo Erich,

die VBA-Funktion DateDiff verlangt für den zweiten und dritten Parameter einen Datewert. Bei dir ist aber der dritte Wert vom Typ Variant. Und wieso eigentlich Public?
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • sharky51
Antworten Top
#7
keep it simple:

=F_snb(H1)

Code:
Function F_snb(sp)
   j = 1
   Do Until sp.Offset(j) = ""
      j = j + 1
   Loop
   jj = 1
   Do Until sp.Offset(j - 1, jj) = ""
      jj = jj + 1
   Loop
  
   F_snb = DateDiff("m", sp.Value, sp.Offset(j - 1, jj - 1))
End Function
Antworten Top
#8
(22.11.2015, 13:05)Steffl schrieb: Hallo Erich,

die VBA-Funktion DateDiff verlangt für den zweiten und dritten Parameter einen Datewert. Bei dir ist aber der dritte Wert vom Typ Variant. Und wieso eigentlich Public?

Hallo Stefan,

Du hast Recht...habe das bereits korrigiert.

Danke für den Hinweis.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#9
(22.11.2015, 13:28)snb schrieb: keep it simple:

=F_snb(H1)

Code:
Function F_snb(sp)
  j = 1
  Do Until sp.Offset(j) = ""
     j = j + 1
  Loop
  jj = 1
  Do Until sp.Offset(j - 1, jj) = ""
     jj = jj + 1
  Loop
 
  F_snb = DateDiff("m", sp.Value, sp.Offset(j - 1, jj - 1))
End Function

Hi und vielen Dank,

werde das auch mal testen.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste