Learning Access vor kurzem, aber finde mich saugen auf eine bestimmte Formel. Ich habe versucht, einen Weg zu finden, um die Anzahl der Jahre seit dem Einstellungsdatum eines Mitarbeiters und ein bestimmtes Datum anstelle von heute zu berechnen. Ich suchte und probierte einige Datediff und DATEDIF ohne Glück nur bekommen negative Ergebnisse, wenn überhaupt. Jede Hilfe wird sehr geschätzt.Access 2016 Formel
0
A
Antwort
0
Das ist, weil es nicht so einfach ist und es gibt einige Fallen, in der Tat, wenn Sie korrekt zählen wollen, unter Berücksichtigung von Schaltjahren.
ist der Trick immer DateAdd wie in dieser Funktion zu verwenden:
Public Function Years(_
ByVal datDate1 As Date, _
ByVal datDate2 As Date, _
Optional ByVal booLinear As Boolean) _
As Integer
' Returns the difference in full years between datDate1 and datDate2.
'
' Calculates correctly for:
' negative differences
' leap years
' dates of 29. February
' date/time values with embedded time values
' negative date/time values (prior to 1899-12-29)
'
' Optionally returns negative counts rounded down to provide a
' linear sequence of year counts.
' For a given datDate1, if datDate2 is decreased step wise one year from
' returning a positive count to returning a negative count, one or two
' occurrences of count zero will be returned.
' If booLinear is False, the sequence will be:
' 3, 2, 1, 0, 0, -1, -2
' If booLinear is True, the sequence will be:
' 3, 2, 1, 0, -1, -2, -3
'
' If booLinear is False, reversing datDate1 and datDate2 will return
' results of same absolute Value, only the sign will change.
' This behaviour mimics that of Fix().
' If booLinear is True, reversing datDate1 and datDate2 will return
' results where the negative count is offset by -1.
' This behaviour mimics that of Int().
' DateAdd() is used for check for month end of February as it correctly
' returns Feb. 28. when adding a count of years to dates of Feb. 29.
' when the resulting year is a common year.
'
' 2007-06-22. Gustav Brock, Cactus Data, CPH.
Dim intDiff As Integer
Dim intSign As Integer
Dim intYears As Integer
' Find difference in calendar years.
intYears = DateDiff("yyyy", datDate1, datDate2)
' For positive resp. negative intervals, check if the second date
' falls before, on, or after the crossing date for a full 12 months period
' while at the same time correcting for February 29. of leap years.
If DateDiff("d", datDate1, datDate2) > 0 Then
intSign = Sgn(DateDiff("d", DateAdd("yyyy", intYears, datDate1), datDate2))
intDiff = Abs(intSign < 0)
Else
intSign = Sgn(DateDiff("d", DateAdd("yyyy", -intYears, datDate2), datDate1))
If intSign <> 0 Then
' Offset negative count of years to continuous sequence if requested.
intDiff = Abs(booLinear)
End If
intDiff = intDiff - Abs(intSign < 0)
End If
' Return count of years as count of full 12 months periods.
Years = intYears - intDiff
End Function
Typische Anwendungen:
HiredYears = Years([HireDate], #12/31/2017#)
Hinweis, dass am 1. eines Monats gemietet jemand für eine vollständige Das Beschäftigungsjahr wird am nächsten 1. des Monats gezählt, so dass der Ausdruck eher lautet:
Verwandte Themen
- 1. Composite-Schlüssel in Access 2016
- 2. Fehler 2115 in Access 2016
- 3. Access 2016 VBA: Wie kann ich einen Steuerelementnamen in einer Formel verwenden?
- 4. Access 2010 RT stürzt auf Access 2016 Maschine ab
- 5. Warum erhält Unterformular in Access 2016 Fokus?
- 6. SQL-Sprache in MS ACCESS 2016
- 7. Share Access 2016 Daten über das Internet
- 8. Access 2016 Formularfeld basierend auf vorherigen Formularwert
- 9. Solidworks 2016 SaveAs Access VBA Laufzeitfehler 438
- 10. Update Änderungen in Datagridview in Access 2016
- 11. Microsoft Access-Projekt (ADP) im Zugriff 2016
- 12. Wie ein Vermächtnis Access 2007 ADP migrieren 2016
- 13. Erstellen Sie Access 2016 DB mit VBA-Code
- 14. Größe der Registerkartensteuerung in Access 2016 kann nicht geändert werden
- 15. Importieren von Excel-Dateien in Access mit Excel 2016
- 16. Access 2016 große Formularrahmen unter Windows 10 zu schmal
- 17. C# Kann Datenbank nicht öffnen - Windows 10 Access 2016
- 18. Wie Sie die Access 2016 Home Multifunktionsleiste über VBA ausblenden?
- 19. Access 2016 automatisch Bericht mit Kriterien Prompt ausführen?
- 20. Microsoft Access-Datenbank-Engine 2016 Redistributable ist nicht
- 21. MS Access 2016 VBA ist Null in kombinierten Abfragekriterien
- 22. Ich kann nicht herausfinden SQL Select-Anweisung in Access 2016
- 23. SQL Server Management Studio Anbieter Zeichenfolge MS Access 2016
- 24. Multi Join an zwei Tabellen funktioniert nicht in Access 2016
- 25. Access 2016 - Mehrere Textfelder - Suchen, während Sie nicht arbeiten
- 26. Pausieren Access 2016 VBA, um Excel fatalen Fehler zu vermeiden
- 27. MS ACCESS 2016 - Kriterien für die Abfrage mit Null
- 28. Microsoft Access Query ist zu komplex zum Ausführen - IF-Formel
- 29. Excel Formel/SQL, um berechneten Wert in Access zu erhalten
- 30. Formel
Vielen Dank für Ihre Hilfe. Ich habe den datediff ("yyyy", [Hiredate], 12/312017) ausprobiert, bekomme aber eine negative dreistellige Zahl. Ich schalte es um und bekomme eine positive Nummer, aber immer noch drei Ziffern. Ich muss die Zeit in Jahren zwischen dem Datum, das eingestellt wird, und dem 31.12.2017 als dem heutigen Datum finden. –
_12/312017_ ist kein gültiges Datum. Und warum laufen Sie mit _DateDiff_, wenn es den Job nicht erledigen kann? Deshalb habe ich die Funktion gepostet. Siehe zur Verwendung bearbeiten. – Gustav