1900年より前の日付型文字列を負の数値に変換するユーザー定義関数

1900年より前の日付型文字列を負の数値に変換する方法

Excelでは、1900年1月1日以前の日付を標準的な日付形式で扱うことができません。しかし、VBAを使って独自の関数を作成することで、1900年より前の日付型文字列を負の数値に変換し、独自の日付計算が可能になります。今回は、そのようなVBA関数を作成する方法とその効果について解説します。

関数の導入方法

以下のVBAコードを使って、「DaysBefore1900」という関数を作成します。

Function DaysBefore1900(dateString As String) As Long
Dim baseDate As Date
Dim targetDate As Date
baseDate = DateValue("1900/01/01")
targetDate = DateValue(dateString)
DaysBefore1900 = (DateDiff("d", targetDate, baseDate) - 1) * -1
End Function

この関数を使えば、1900年1月1日より前の日付型文字列を、負の数の数値に変換できます。

関数の効果

「DaysBefore1900」関数は、引数として与えられた日付型文字列を、1900年1月1日を基準とした負の数値に変換します。この関数を使用すると、以下のような計算が可能になります。

  • =DaysBefore1900(“1900/01/01”) → 1
  • =DaysBefore1900(“1899/12/31”) → 0
  • =DaysBefore1900(“1899/12/30”) → -1
  • =DaysBefore1900(“1788/10/05”) → -40,628

これにより、1900年1月1日以前の日付に対しても、日付差の計算が可能になります。

Excelの標準機能では、1900年1月1日より前の日付を扱うことが難しいですが、VBAを利用して独自の関数を作成することで、1900年以前の日付型文字列を負の数値に変換し、日付計算を行うことができます。「DaysBefore1900」関数は、そのような目的で作成された関数で、日付型文字列を1900年1月1日を基準とした負の数値に変換することが可能です。

関数の応用例

「DaysBefore1900」関数を使って、1900年より前の日付に対するさまざまな計算ができます。例えば、以下のような計算が可能です。

例1: 二つの日付の日数差を求める

「DaysBefore1900」関数を使用して、1900年より前の二つの日付間の日数差を計算することができます。

=DaysBefore1900("1788/10/05") - DaysBefore1900("1776/07/04")

この計算により、1788年10月5日と1776年7月4日の間の日数差が得られます。

例2: 年数を加算した日付を求める

「DaysBefore1900」関数を使って、1900年より前の日付に年数を加算した新しい日付を求めることができます。まず、日付を数値に変換してから、年数に相当する日数を加算し、再び日付型文字列に変換します。

=NumberToDate(DaysBefore1900("1788/10/05") + (10 * 365.25))

この計算では、1788年10月5日に10年を加算した新しい日付が得られます。

注意点

「DaysBefore1900」関数を使用する際には、以下の点に注意してください。

  • 日付型文字列は、”yyyy/MM/dd”の形式で与える必要があります。
  • 1900年以前の日付に対してのみ、負の数値が得られます。1900年1月1日以降の日付に対しては、正の数値が得られます。
  • この関数は、Excelの標準的な日付計算の制限を回避する目的で作成されたものです。Excelの通常の日付関数を使用することが可能な場合は、そちらを使用することが推奨されます。

まとめ

VBAを利用して作成した「DaysBefore1900」関数を使用することで、1900年より前の日付型文字列を負の数値に変換し、日付計算を行うことができます。この関数を活用して、さまざまな日付計算を行い、データ分析やレポート作成の幅を広げましょう。

参考:負の数値を1900年より前の日付型文字列に変換する

負の数値を1900年より前の日付型文字列に変換するユーザー定義関数
負の数値を1900年より前の日付型文字列に変換する方法Excelでは、1900年1月1日以前の日付を標準的な日付形式で扱うことができません。しかし、VBAを使って独自の関数を作成することで、負の数値を1900年より前の日付型文字列に変換し、...

コメント