dateValue関数

本ページには広告が含まれています。

日付文字列をシリアル値に変換します。

構文
  1. Double = dateValue( str )
引数
str 必須
日付文字列
戻り値
シリアル値

プログラム

UWSC

解説

    2行目
    UWSC
    カットオフ年の終了年を指定します。西暦を2桁で指定したときcutOffYearで指定された年の値までの100年間で西暦を決めます。デフォルトでは2049年までの100年間(1950〜2049年の範囲)で年を決定します。例えば年を25と指定した場合は2025年、86と指定した場合は1986年として扱います。
    3行目
    UWSC
    英語月名を格納した配列。日付文字列として英語月名が指定されたときに数字に変換するときに使用します。
    5行目
    UWSC
    正規表現を格納する連想配列。
    6行目
    UWSC
    西暦を表す正規表現。1900〜9999年の範囲の値。
    7行目
    UWSC
    2桁の年を表す正規表現。00〜99の範囲の値。
    8行目
    UWSC
    元号を格納した連想配列。明治、大正、昭和、平成、令和、明、大、昭、平、令、M、T、S、H、Rにマッチします。
    9行目
    UWSC
    月を表す正規表現。1〜12の範囲の値。0埋めの有無に関係なくマッチします。
    10行目
    UWSC
    2桁の月を表す正規表現。01〜12の範囲の数値。
    11行目
    UWSC
    英語月名を表す正規表現。January〜December、短縮形のJan〜DecとSeptにマッチします。
    12行目
    UWSC
    日を表す正規表現。1〜31の範囲の値。0埋めの有無に関係なくマッチします。
    13行目
    UWSC
    2桁の日を表す正規表現。01〜31の範囲の数値。
    14行目
    UWSC
    英語の日付を表す序数表記。1st〜31stの範囲。
    15行目
    UWSC
    年月日を区切る文字を表す正規表現。例えば2024/10/24の/の部分。.、/、-にマッチします。
    17-22行目
    UWSC
    元号から西暦に変換するための値を格納する連想配列。8行目>>>でマッチする文字列に対応しています。例えば令和6年の場合、キー名が令和の値2018と6を足すことで西暦2024年と求められます。
    24,129行目
    UWSC
    strで指定された日付形式にマッチする正規表現のCASE句を実行します。いずれのCASE句でも行っている処理はすべてマッチした日付文字列から年、月、日を取り出してyyyy/mm/ddの形式でdateに代入することです。
    25-29行目
    UWSC
    yyyy/mm/dd、yyyy-mm-dd、yyyy.mm.ddもしくはyyyy/mm、yyyy-mm、yyyy.mmの形式の日付文字列にマッチします。\2は区切り文字を表していて年と月の区切り文字と月と日の区切り文字が同じ場合にマッチします。例えば2024/10/23にはマッチしますが、2024/10-23にはマッチしません。dateにはyyyy/mm/ddの形式に変換した日付文字列が代入されます。日が省略された場合はその年月の1日として扱い、例えば2024/10と指定した場合は2024/10/01として扱います。IIF関数 (自作関数)の箇所がその処理をしています。
    30-34行目
    UWSC
    mm/dd/yyyy、mm-dd-yyyy、mm.dd.yyyyの形式の日付文字列にマッチします。dateにはyyyy/mm/ddの形式に変換した日付文字列が代入されます。
    35-39行目
    UWSC
    dd/mm/yyyy、dd-mm-yyyy、dd.mm.yyyyの形式の日付文字列。dateにはyyyy/mm/ddの形式に変換した日付文字列が代入されます。
    40-44行目
    UWSC
    ggge/mm/dd、ggge-mm-dd、ggge.mm.dd、gge/mm/dd、gge-mm-dd、gge.mm.dd、ge/mm/dd、ge-mm-dd、ge.mm.ddの形式の日付文字列にマッチします。
    45-50行目
    UWSC
    2桁年/月/日、2桁年-月-日、2桁年.月.日の形式の日付文字列。yにはマッチした2桁年を代入し計算に使うためVAL関数 (スクリプト関数)で数値に変換します。2行目>>>で指定されたカットオフ年の範囲に収まるような4桁年を求めます。dateには年/月/日の形式に変換した日付文字列が代入されます。
    51-56行目
    UWSC
    月/日/2桁年、月-日-2桁年、月.日.2桁年の形式の日付文字列。年月日の順序が違うだけで処理は38行目>>>と同じです。
    57-62行目
    UWSC
    日/月/2桁年、日-月-2桁年、日.月.2桁年の形式の日付文字列。処理は38行目>>>と同じです。
    63-67行目
    UWSC
    アメリカ式の月 日, 年の形式の日付文字列。
    68-72行目
    UWSC
    イギリス式の日 月 年の形式の日付文字列。
    73-77行目
    UWSC
    和暦年月日、和暦年月の形式の日付文字列。
    78-82行目
    UWSC
    年月日、年月の形式の日付文字列。
    83-87行目
    UWSC
    月日の形式の日付文字列。
    88-93行目
    UWSC
    年月日を6桁で表した形式の日付文字列。
    94-99行目
    UWSC
    月日年を6桁で表した形式の日付文字列。
    100-105行目
    UWSC
    日月年を6桁で表した形式の日付文字列。
    106-110行目
    UWSC
    年月日の形式の日付文字列。
    111-115行目
    UWSC
    月日年の形式の日付文字列。
    116-120行目
    UWSC
    日月年の形式の日付文字列。
    121-123行目
    UWSC
    いずれの日付文字列の形式にもマッチしなかった場合はERR_VALUEを返します。
    125行目
    UWSC
    日付文字列dateをuwscToSerial関数 (自作関数)でシリアル値に変換した値を戻り値として返します。

日付文字列の形式

以下はdateValue関数で使える日付書式指定子です。

日付書式指定子 意味
yyyy 年
yy 西暦の下2桁
mm 月
mmm 英語月(Jan, Feb, Mar, …)
mmmm 英語月(January, February, March, …)
dd 日
g 元号をアルファベットで表記
M、 T、 S、 H、 R
gg 元号を漢字の頭文字で表記
明、 大、 昭、 平、 令
ggg 元号を漢字で表記
明治、 大正、 昭和、 平成、 令和
e 元号の年。令和6年ならば 6。

以下はdateValue関数でシリアル値に変換することができる日付文字列の形式です。普段使わない形式もありますが、プログラムが複雑になるのでとりあえず日付と認識できるものとして記載しています。

年を省略した日付文字列を指定した場合は今年、月を省略した場合はその月の月初日(1日)として扱われます。

dateValue関数は日付文字列をシリアル値に変換する関数なので時刻が含まれる場合、時刻部分は無視(0時扱い)となります。

以下の例は2024年に実行したときの結果です。

日付文字列のパターン例
yyyy/mm/dd1990/04/01
yyyy-mm-dd1990-04-01
yyyy.mm.dd1990.04.01
yyyy/mm1990/04
yyyy-mm1990-04
yyyy.mm1990.04
mm/dd/yyyy04/01/1990
mm-dd-yyyy04-01-1990
mm.dd.yyyy04.01.1990
dd/mm/yyyy01/04/1990
dd-mm-yyyy01-04-1990
dd.mm.yyyy01.04.1990
ggge/mm/dd平成02/04/01
gge/mm/dd平02/04/01
ge/mm/ddH02/04/01
ggge-mm-dd平成02-04-01
gge-mm-dd平02-04-01
ge-mm-ddH02-04-01
ggge.mm.dd平成02.04.01
gge.mm.dd平02.04.01
ge.mm.ddH02.04.01
ggge/mm平成02/04
gge/mm平02/04
ge/mmH02/04
ggge-mm平成02-04
gge-mm平02-04
ge-mmH02-04
ggge.mm平成02.04
gge.mm平02.04
ge.mmH02.04
yy/mm/dd90/04/01
yy-mm-dd90-04-01
yy.mm.dd90.04.01
mm/dd/yy04/01/90
mm-dd-yy04-01-90
mm.dd.yy04.01.90
dd/mm/yy01/04/90
dd-mm-yy01-04-90
dd.mm.yy01.04.90
mm/dd04/01
mm-dd04-01
mm.dd04.01
mmmm d"st", yyyy
mmmm d"nd", yyyy
mmmm d"rd", yyyy
mmmm d"th", yyyy
April 1st, 1990
mmmm d"st",yyyy
mmmm d"nd",yyyy
mmmm d"rd",yyyy
mmmm d"th",yyyy
April 1st,1990
d"st" mmmm yyyy
d"nd" mmmm yyyy
d"rd" mmmm yyyy
d"th" mmmm yyyy
1st April 1990
ggge年mm月dd日平成02年04月01日
gge年mm月dd日平02年04月01日
ge年mm月dd日H02年04月01日
ggge年mm月平成02年04月
gge年mm月平02年04月
ge年mm月H02年04月
yyyy年mm月dd日1990年04月01日
yyyy年mm月1990年04月
mm月dd日04月01日
yymmdd900401
mmddyy040190
ddmmyy010490
yyyymmdd19900401
mmddyyyy04011990
ddmmyyyy01041990

日付文字列は区切り文字を無視した場合年月日、月日年、日月年の順番でマッチ検索を行い最初にマッチした形式で認識します。例えば01/02/2024という日付文字列の場合は年/月/日、月/日/年、日/月/年の順番でマッチ検索を行っていきます。最初にマッチするのは月/日/年の形式なので01/02/2024は2024年01月02日として扱われます。

次に14/02/2024という日付文字列の場合、月/日/年という形式だと2024年14月02日と存在しない日付となるので日/月/年の形式にマッチし2024年02月14日として扱われます。

使い方

年月日の形式からシリアル値を求める

2024年10月28日のシリアル値を求めます。

UWSC
結果
プレーンテキスト

年が省略された日付文字列のシリアル値

年が省略されている場合は今年として扱います。

UWSC
結果
プレーンテキスト

日が省略された日付文字列のシリアル値

日が省略されている場合は指定年月の月初(1日)として扱います。

以下は2024年10月01日として扱われます。

UWSC
結果
プレーンテキスト

今日のシリアル値

today関数 (自作関数)で取得した今日の日付文字列からシリアル値を求めます。

UWSC
結果
プレーンテキスト

他の日付形式に変換

違う形式に変換する場合はtext関数 (自作関数)を使います。

以下は2024年10月28日をシリアル値に変換してからtext関数 (自作関数)でggge年mm月dd日の形式に変換しています。

UWSC
結果
プレーンテキスト

終了日を過ぎた和暦表記の日付文字列を対応する元号に変換

以下は昭和100年1月1日を対応する元号の日付文字列に変換します。

UWSC
結果
プレーンテキスト

色々な形式の日付文字列の変換

dateValue関数で変換できる日付文字列の形式を一通り実行しています。

UWSC
結果
CSV

プログラム実行例

写真の撮影日時毎に枚数を取得

選択したフォルダにある写真の撮影日時を取得・カウントします。

UWSC
結果
プレーンテキスト
使用関数

Windowsの稼働時間を取得

Windowsシステムの起動時間から稼働時間を求めます。

結果はd:hh:nn:ssの形式で出力されます。

UWSC
結果
プレーンテキスト
使用関数

日付が指定した範囲内にあるか

今日の日付が2022/04/01〜2022/04/05の範囲内にあるか。

日付をシリアル値に変換し、2022/04/01以降かつ2022/04/05以前かを調べる。

UWSC
使用関数

フォルダ内のファイルを更新日時でソートする

UWSC
結果
プレーンテキスト
使用関数

写真を撮影日時毎にフォルダ分けする

UWSC
使用関数

参考文献

  1. Excel は 2 桁の年番号で動作します - Microsoft 365 Apps | Microsoft Learn

関連記事

now関数 (自作関数)
現在の日時のシリアル値を返します。
dateSerial関数 (自作関数)
引数に指定した年、月、日の日付が表すシリアル値を返します。
getSerialTime関数 (自作関数)
UWSC時間からシリアル値を取得します。
uwscToSerial関数 (自作関数)
UWSC時間をシリアル値に変換します。
serialToUwsc関数 (自作関数)
シリアル値をUWSC時間に変換します。
serialToUNIX関数 (自作関数)
シリアル値をUNIX時間に変換します。
UNIXToSerial関数 (自作関数)
UNIX時間 をシリアル値に変換します。
Hour関数 (自作関数)
シリアル値で与えられた時刻から時間を求めます。戻り値は0〜23の範囲の整数となります。
Second関数 (自作関数)
シリアル値から秒を求めます。
timeValue関数 (自作関数)
指定した時間のシリアル値を求める。