Excelの日付に関する使用上の問題
Power Automateを業務で使っているみなさまはExcelの日付データをPower Automateで取得してListsに転記する、というシチュエーションは結構あると思います。
今回は、実務ではあまり起こりにくいものの、市民開発者として知っておいて損はないExcelの仕様についてご紹介します。
前提
Excel上のテーブルから日付を抽出しListsに転記する、というケース
事象
1900年1月5日、1900年2月10日など1900年の特定の日付を転記しようとしたときにLists上で1日減算されて転記される。
再現
Power AutomateでExcelの日付データをSPO Listsに転記するフローを作成して、事象を再現します。
まず下図のようなExcelデータを用意し、onedriveに格納しておきます。
日付、曜日、名称列があるテーブル「日付テーブル」を作成しました。
「タイトル」列がデフォルトで作成されますが、ここでは使用しません。
次にPower Automate クラウドフローをこんな感じで作成します。
Excelのテーブルからデータを取得してListsに転記するシンプルなクラウドフローです。
Listsへ転記するアクションのパラメータ。Apply to eachは自動で作成されます。
この状態でテストすると、「日付が正しくない」と怒られました。
最初に処理したレコードだけアクションの実行に失敗したようです。Listsの転記結果を確認してみましょう。
名称を「テスト」にしたレコードが転記されていませんね。そしてテスト2、3、4の日付が1日少なくなっています!!これが今回の事象です。
原因
これは、「1900年2月29日という本来存在しない日がExcel上に存在する」ことが原因で発生しています。下記の記事が大変参考になります。
つまり、今回の事象の発生要因は下記の通りです。
1.日付が1日減った状態で転記される
⇒転記元となっているExcelの仕様の問題。Excelでは1900年2月29日という存在しない日付が存在する関係で、それ以前の日付が1日減算された状態で転記されたため。
2.1900年1月1日の日付のレコードが転記できない
⇒1900年2月29日以前の日付であるため、日付が1日減った状態で登録されようとしているが、Listsに転記できるのは1900年1月1日の日付からであり、1899年12月31日のデータは登録できないため。
1900年2月29日(実際には存在しませんが)以前の日付が入力されているばあいは1日分日付を加算する処理を加える必要があるので注意しましょう。
19世紀の日付を扱うことなんてねえよという至極当然の突っ込みは無しでお願いします。