4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

雑・Excel入門試論 - 脱VLOOKUPの思考 06 - セル - 日時データ

Last updated at Posted at 2022-12-05

日時データとは

エクセルの日付データは、数値と同様に倍精度浮動小数点です。数値化したものは、シリアル値と呼ばれます。ただし、マイナス値は持てません。整数部分が日付で、小数点以下が時間を表します。

日付

日付は、1900年1月1日を1とし、以後1づつ増えていきます。シリアル値0は、1900年1月0日になってしまうので、1900年1月1日からが有効な日付で、それ以前の日付を表すことはできません。

image.png

ただし、存在しないはずの 1900年2月29日 がシリアル値60に割り当てられています。これは、かつてスプレッドシート・アプリでは大ヒットしていたLotus123が抱えていたバグと、データレベルでの互換性をもたせたためなので、1900年の日付を扱う場合は注意が必要です。
image.png

扱える日付の最大値は、9999年12月31日です。
image.png

時間

時間は、小数点以下で表現されます。1時間は $\frac{1}{24} \fallingdotseq 0.0416666666666667 $ になります。見ての通り、割り切れないので、エクセルの有効桁数15桁で丸められています。

image.png

つまり、エクセルは全ての時間を正確に数値化することはできないのですが、できるだけ正しい表示になるよう努力しています。そのおかげで、我々は特に問題なく時間を扱うことができています。

ただし、Open XMLデータとしては、17桁で保存されています。エクセルをデータソースとして他のアプリケーションで利用する場合は注意が必要です。

時間の演算

日付は1~2958465の整数で演算を行う限りでは、特に気をつけることはありません。
しかし、時間については注意が必要です。
下記の表は、A列とB列の2行目と3行目は手入力し、青字は2行目3行目を指定してオートフィルさせたものです。C列で、A列とB列が一致するか判定したところ、1:00:05で不一致になってしまいました。
image.png

Open XMLのデータで見ると、以下のように、なっていました。

時間
1:00:00 A 4.1666666666666664E-2
B 4.1666666666666664E-2
1:00:01 A 4.1678240740740745E-2
B 4.1678240740740745E-2
1:00:02 A 4.1689814814814818E-2
B 4.1689814814814798E-2
1:00:03 A 4.1701388888888885E-2
B 4.1701388888888899E-2
1:00:04 A 4.1712962962962959E-2
B 4.1712962962963E-2
1:00:05 A 4.1724537037037039E-2
B 4.1724537037037102E-2

1:00:00と1:00:01はA列、B列とも手入力なので一致していますが、それ以後は少しづつずれていき、1:00:05で有効桁数の丸めでも補正できな位ほどずれてしまいました。

以上のことから、時間データの演算を重ねるとズレが発生する可能性があることを理解しておいてください。

オプション「1904年から計算する」

02 - ブック - オプション」参照

コンテンツ

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?