Excelの日付が数字になるときの対処法

Excelで日付を入力すると、『41510』のような数字になることがあります。


これはExcel内で日付が1900年1月1日を起点にした日数で日付が管理されているからです。
この数字をシリアル値といいます。

セルごとに変更する方法
数式で変更する方法
C言語やPHPなどで変更する場合

日付は1900年1月1日を1としたときの整数値


時刻は24時間を1としたときの小数値


日時は日付の整数値と時刻の小数値をたしたものになります。


UNIXタイムの起点となる1970年1月1日のシリアル値は『25569』です。

セルごとに変更する方法

スポンサーリンク

数字になってしまったセルを右クリックして、『セルの書式設定』をクリックします。


『表示形式』タブ内の『分類』から『日付』を選択します。
どのような日付形式の表示にするかは『種類』から選択します。

数式で変更する方法

[参考記事] Excelの日付や時間の表示形式(書式記号)の一覧

数式バーなどで

="日付は"&C7&"です"

と入力して表示すると

日付は41510です

と表示されてしまうことがあります。




この場合、TEXT関数を使います。

TEXT関数を使い、

="日付は"&TEXT(C7,"yyyy年m月d日")&"です"

と入力して表示すると

日付は2013年8月24日です

と正しく表示がされるようになります。


C言語やPHPなどで変更する場合

Excel内の日付は1900年1月1日を起点とした日数となるシリアル値で管理されているため、 シリアル値を24時間×60分×60秒とした秒数から1900年1月1日のUNIXタイムを引けば対象となる日付のUNIXタイムが得られるように思います。

しかし1970年1月1日以前の日付のUNIXタイムはmktimeなどでは正しく得られません。
これはC言語やPHPではUNIXタイムが1970年1月1日を起点としていてマイナスのUNIXタイムを扱うことができないからです。

そこで例えば1970年1月1日のシリアル値は『25569』となるので、 対象となる日付のシリアル値から『25569』を引き、1970年1月1日を起点としたシリアル値に変換するといいです。

date("Y-m-d",24*60*60*($date_serial-25569))

ただ対象となる日付のシリアル値から『25569』を引き24時間×60分×60秒をかけた値はたまたま正しく日付が得られているだけです。
実はこれで得られたUNIXタイムは対象の日付の9時となります。
時差が加算されるからです。

2000年1月1日のシリアル値は『36526』なので、

date("Y-m-d",mktime(0,0,0,1,1,2000)+24*60*60*($date_serial-36526))

のようにすると時差を考慮した値が得られます。

関連記事

スポンサーリンク

groupadd グループを作成する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る