2つのExcelブック間で日付をコピー&ペーストすると、謎がズレます。
基準日が原因でしょう。
解決できます。
Excel
基準日付
ときどき発生する問題ですね。
Excelの日付には基準日という起点があり、とある経緯でそれが2種類あるというお話です。
今回の環境は、Windows 10 Pro/Home、Excel 2013です。
ただし、対象ブックは.xlsで、Excel 2000くらいの環境で作られたものと考えられます。
現行のExcelすべてに当てはまる話です。また、OSバージョンもあまり関係ないです。
年月日のズレですね?
あるブックから別のブックに日付をコピーすると、必ず日付と曜日が変わってしまう(ずれてしまう)ということです。
お問合せ内容を聴く限り、シートには日付と曜日の項目があり、それぞれセルの書式設定で表示形式を指定しているようです。
年までは表示されていないため、年が変わっているかどうか、ぱっと見では気付かなかった模様です。
セル内のデータ(値)を確認してもらって、年も変わっていることが判明しました。
これで法則性があることも分かりました。
シリアル値を表示する基準が異なっていたのです。つまり、日付のゼロの位置が異なっていました。(詳細は後述します。)
原因はExcelの「基準日付」
基準日付が原因です。
Excelには、基準日付が2種類あります。
これは、オプションの詳細設定で変更可能です。(後述)
少しややこしい話になってしまいますが、まずは発生している事象を紐解いてみましょう。
基準日の確認方法
それぞれのブックで、以下の設定を確認します。
「次のブックを計算するとき」のところにある「1904年から計算する」のチェックボックスのオンとオフのところを確認します。両者で異なっているはずです。
「次のブックを計算するとき」と書いてある右側のプルダウンメニューでブックを選べるので、切り替えながら確認してください。
ここの設定が同じ場合は、原因は他にあります。
書式設定などを確認しますので、別途お問合せください。
基準日付の話
マメ知識です。
少し細かいかもしれませんが、知っておくと今回の事象の全体像が見えてきます。
日付はシリアル値
マクロを書く方にはなじみ深いと思いますが、Excelでは日付をシリアル値で管理しています。
絶対値と考えていただければよろしいかと。
基準日から何日離れているかという値で管理するのです。
多くの場合は正の整数です。
基準日のところまで、もう少々お付き合いください。
基準日付は2種類
そしてExcelには、以下の2種類の基準日付があるのです。
- 1900年1月1日
- 1904年1月1日
前者はMicrosoft(Windows)の標準で、後者はApple(Mac)の標準です。(← かなり単純化しました。)
つまり、Windowsのみを使っていれば、特別な設定を入れない限りは、1900年1月1日が基準になります。
具体的には4年と1日のズレ
日付のシリアル値と基準日に関して、具体的に見ていきましょう。
- Microsoftの場合: 1900年1月1日が日付「1」の日
- Macintoshの場合: 1904年1月1日が日付「1」の日
うるう年を挟みますので、両者(両社)のズレは4年と1日です。
中途半端に値が変わっているように見えてしまうのは、このためです。。
コピペで何が起こるのか
では、日付が「2」の時を考えてみましょう。
- Microsoftの場合: 1900年1月2日(火)です。
- Macintoshの場合: 1904年1月2日(土)です。
Excelでは、セルの中身と画面上の見た目が異なります。
どう見せるかは、セルの書式設定で決めているのです。
上の例ですと、データの見た目(画面表示されている内容)は違うのですが、中身(セルに設定されている値)は「2」というシリアル値なのです!
前者(前社: Microsoft)のExcelにある日付を後者(後社: Apple)のExcelにコピペするとき、渡される値は「2」なのです。
上記のとおり、Microsoftの「2」とMacintoshの「2」は異なります。
それぞれの基準で解析した結果は異なってしまいますね。
実際に、Excelのセルに「2」と入力して、セルの書式設定の表示形式を「日付」に変更してみると分かりやすいと思います。
2種類の解決方法
日付がズレてしまう場合の解決方法を2種類ご紹介します。
ひとつめは、貼り付けオプションを利用する方法です。
シリアル値なので、単純計算で調整できます。
対処療法です。
もうひとつは、あらかじめ設定をそろえておくことです。
少し手間ではありますが、長期的には取り回しがよいです。
解決策1: 貼り付けオプションを活用する
貼り付けて変わってしまった日付に対して、値を加算するか減算するかして調整します。
その時の値は、『1462』です。
すでに他にも日付がいろいろ入ってしまっているブックの場合には、対処療法という選択肢のみでしょう。
準備と調整に分けて操作を書きます。
準備
- 空白のセルに『1462』を入力
- 対象セルをコピー
コピー状態を維持してください。
調整
- 日付が変わってしまったセル(複数の場合は範囲を選択)を右クリックして、「形式を選択して貼り付け」をクリック
- 貼り付けグループ内の「値」を選択
- 演算グループ内の「加算」または「減算」を選択(★)
- 「OK」をクリック
★のところ → 1900年からコピーして1904年に貼り付けたことで変わってしまった日付には、減算貼り付けを選択し、1904年からコピーして1900年に貼り付けて変わってしまった日付には、加算貼り付けを選択するという寸法です。
解決策2: 設定をそろえておく
既存ブックに、問題になりそうな日付が入っていない場合や限定的で修正可能な範囲ならば、元から正してしまいましょう!
この場合、既存の日付が変わってしまいますので、修正漏れがないように気を付けてください。
OSが異なっている環境で新規作成した場合には、基準日付の設定を確認しておくと、後で問題にならなくてよいです。
既存次第だと思います
Excelでの日付コピペ時には、ときどき、ズレが生じることがあります。
その原因と対処に関しての備忘録です。
理想としては、設定をそろえてしまうことで、問題の再発を根本的に防止したいところです。
ただし、すでにたくさんの日付が設定されてい待っているような既存ブックであれば、都度の対処にならざるを得ません。
『1462』を加算(プラス)するか減算(マイナス)するかして、対処しましょう。
ご意見やご感想などお聞かせください! コメント機能です。