
AlteryxのDateTime型からExcelのシリアル値を計算する方法をご紹介します
Alteryx ACEのAkimasaKajitaniです。
Excelのシリアル値は「1900年1月1日」が基準となっており、そこから1日経つと1加算されていきます。以前のブログ記事で、Excelのシリアル値からAlteryxの日時型に変換する方法は紹介しましたが、今回は逆の内容となる、「AlteryxのDateTime型からExcelのシリアル値を計算する方法」をご紹介します。
本記事ですが、一部考慮漏れがあったので、2026/04/13に記事の見直しを行いました。
DateTime型からExcelのシリアル値を計算する
Excelのシリアル値は「1900年1月1日」が基準となっており、そこから1日経つと1加算されていく、という定義を考えると、1900年1月1日からどれくらい経過したかを計算できれば取得が可能です。この場合ではAlteryxでは、DateTimeDiff関数が利用可能です。
DateTimeDiff(dt1,dt2,u)
dt1:期間の最後の日付
dt2:期間の最初の日付
u:単位。例えば日単位なら"Day"、秒単位なら"Second"
dt1-dt2と計算されるため、dt2は常に"1900-01-01 00:00:00"となります。dt1の方は、変換したい日付を入れます。
Excelのシリアル値は、整数は日、小数部分は時間の部分を示しています。まず、単位をDayでやってみましょう。
DateTimeDiff("2024-02-05 12:23:45","1900-01-01 00:00:00","day")
この答えは、45325となり小数部分が消えています。単位に指定した部分は切り捨てられてしまうようです。
となると、秒単位で差分を出し、計算で求めるしかありません。
DateTimeDiff("2024-02-05 12:23:45","1900-01-01 00:00:00","second")
この答えは、3916124625となります。今度は非常に大きい整数値になりました。
ところで、1日は何秒でしょうか?24時間×60分×60秒で86400秒となります。つまり、秒単位で求めたものを86400で割れば良いということになります。
DateTimeDiff("2024-02-05 12:23:45","1900-01-01 00:00:00","second")/86400
結果は、「45325.5164930556」ということで、正解です。
(以下、2026/04/13追記)
ただし、これを実際にExcelで読み込んでみるとズレてしまいます。これには2つ理由があります。
- 始まりが、0なのか1なのか問題
- 1900/2/29がExcel上で存在する問題
1については、基準が1始まりであることです。そのためDateTimeDiffの結果に1を足す必要があります。
2については、Excel(古くはLotus1-2-3)のバグにより、1900年をうるう年判定しているので、一日余分なものがある、ということです。
これを考慮すると、
//Excel向けにシリアル値を出力する場合
IF [DateTime]>="1900-03-01" THEN
DateTimeDiff([DateTime],"1900-01-01 00:00:00","second")/86400+2
ELSE
DateTimeDiff([DateTime],"1900-01-01 00:00:00","second")/86400+1
ENDIF
とするのが正しいです。ただ、1900年なんて古い日付はほとんど使われることがないため、実質以下のような計算式でも問題ないと思われます。
DateTimeDiff([DateTime],"1900-01-01 00:00:00","second")/86400+2
ちなみに、Alteryxから日時型や日付型のデータをExcelに書き出すと、1900-01-01~1900-02-28の日付は一日ズレます。一日ずらしてから出力するようにしてください。つまり、以下のようにします。
IF [DateTime]>="1900-03-01" THEN
[DateTime]
ELSE
DateTimeAdd([DateTime],-1,"Day")
ENDIF
結論
AlteryxのDateTime型をExcelのシリアル値に置き換える場合は、以下の計算式で可能となります。
//Excel向けにシリアル値を出力する場合
IF [DateTime]>="1900-03-01" THEN
DateTimeDiff([DateTime],"1900-01-01 00:00:00","second")/86400+2
ELSE
DateTimeDiff([DateTime],"1900-01-01 00:00:00","second")/86400+1
ENDIF
もしくは
DateTimeDiff([DateTime],"1900-01-01 00:00:00","second")/86400+2
サンプルワークフローダウンロード
運営会社
