【AlteryxTips】DateTime型からExcelのシリアル値を計算する方法

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つ理由があります。

  1. 始まりが、0なのか1なのか問題
  2. 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

 

サンプルワークフローダウンロード

ExcelSerial_SampleWorkflow

 

AlteryxDesigner初心者の方向け教育プログラム

京セラみらいエンビジョンでは、AlteryxDesignerをこれから利用していくお客様を対象に、初心者向けのトレーニングをご用意しております。

ハンズオン形式で実施致しており、使用し始めた方の上達をサポート致します。

トレーニング以外にもAlteryxを用いた環境構築、開発、ワークフロー作成を承りますので、お気軽にご相談ください。

おすすめの記事