概要
Power AutomateでExcelから日付データ(日付書式が設定されているセルのデータ)を取得すると、日付形式ではなくシリアル値になってしまう。
Power Automate内部で利用するのにシリアル値では不便なので日付形式に変換します。
Excel日付のシリアル値
- Excelでセルに日付の書式を設定すると表示は日付として見えるが、内部的にはシリアル値で記録されている。
(日付の書式が設定されているセルの書式を標準にするとシリアル値が表示されます)
- 画像の赤枠部分がシリアル値
- 日付:少数点より前の部分
- Excelでは1900年1月1日が1となる(設定により1904年1月1日が1になる場合もある)
- Power Automateでは1900年1月1日を基準にするとずれるため、1899年12月30日を基準日にしている。
詳しくは、Excelの日付データは1900年1月1日から数えた連番ではない 1900年うるう年問題を参照してください。
多分Power Automateもこの仕様になっていると思われます。
- 時間:小数点より後ろの部分
- 時間は1/86400(24時間*60分*60秒)で1秒のシリアル値が計算できます。
- 2分の場合
- 1/86400*120
- シリアル値から時間に戻す場合
- シリアル値 * 86400
- 日付:少数点より前の部分
- Power Automateで取り扱うため小数点で分割処理をしています。
- 画像の赤枠部分がシリアル値
手順
Excelデータの準備
-
セルに日付の書式を設定します。(画像のように入力すると自動的に書式設定されています)
- 「表示形式」→ 日付
- 「種類」→ 2012/3/14 13:30
「テーブルとして書式設定」ダイアログの《先頭行をテーブルの見出しとして使用する》にチェックを入れて《OK》をクリックします。
Power Automateの設定
Excelからシリアル値を取得
-
左側のメニューより《作成》→ 《予定フローを作成》をクリックします。
- 今回は「予定フローを作成」を選択していますが、適宜あったメニューを選んでください。
-
- フロー名:適当な名前を入力します。
- その他必要な設定を行います。
「アクションを選択してください」の検索欄に「excel」と入力し、表示された《Excel Online(Business)》をクリックします。
-
「Excel Online(Business)」アクションの中から、《表内に存在する行を一覧表示》をクリックします。
- このアクションは、指定したExcelファイルからデータを取得します。
- 1回実行すると256行のデータを取得します。
256行以上データが存在する場合は、このアクションを複数回実行する必要があります。
方法は、Do untilを使い、ExcelやSharePointリストのデータ取得数制限を回避して全件取得するを参考にしてください。
-
Excelデータの準備でOneDrive for Businessに作成したExcelを指定する。
- 場所:OneDrive for Business
- ドキュメントライブラリー:OneDrive
- ファイル:保存してあるフォルダーを選択する
- テーブル:適当なテーブル名(何も設定していない場合は、テーブル1になる)
-
- このアクションは、受け取ったデータが全てなくなるまで繰り返し実行します。
-
「動的なコンテンツ」ダイアログから「表内に存在する行を一覧表示」の《value》をクリックします。
- Valueには「表内に存在する行を一覧表示」のアクションで取得したデータが入っています。
シリアル値を日付に変換
「動的なコンテンツ」ダイアログから「表内に存在する行を一覧表示」の《日時》をクリックします。(日時はExcelに作成したテーブルの見出し名です)
《組み込み》→《データ操作》をクリックします。
《作成》をクリックします。
「作成」の「入力」ボックスをクリックします。
シリアル値を時間に変換
シリアル値を日付に変換とほぼ操作が同じなので画像は割愛しています。
《アクションの追加》をクリックします。
《組み込み》→《データ操作》をクリックします。
《作成》をクリックします。
「作成」の「入力」ボックスをクリックします。
-
「動的なコンテンツ」ダイアログの《式》をクリックし、以下の式を入力します。
- 式:float(mul(div(int(substring(last(outputs('作成_2')), 0, 5)), 100000.0), 86400))
- 説明
- last(outputs('作成_2')):小数点から後ろの数値を取得
- int(substring(last(XXXX, 0, 5)):先頭から5桁を取得してint型に変換
- div(XXXX, 100000.0):除算して少数値にする。100000.0に.0(少数値)を付加しているのは結果をfloat型にするため。.0がないとint型になり少数以下が切り捨てられる
- float(mul(XXXX, 86400)):秒数を計算してfloat型に変換
《更新》をクリックします。
《アクションの追加》をクリックします。
《組み込み》→《日時》をクリックします。
《時間への追加》をクリックします。
-
「時間への追加」アクションに以下の値を設定します。
実行結果の確認
-
「時間への追加2」アクション内の入出力データが表示されます。
- 別のデータが見たい場合は、上部にある《前へ》や《次へ》をクリックします。
- 出力データの確認
- body:加工後の結果
これでExcel日付(シリアル値)を日付に変更できました。
比較方法
参考サイト
Excelの日付データは1900年1月1日から数えた連番ではない 1900年うるう年問題
Do untilを使い、ExcelやSharePointリストのデータ取得数制限を回避して全件取得する
Power Automate 「表内に存在する行を一覧表示(Excel Online (Business))」アクション
Azure Logic Apps および Power Automate の式で関数を使用するためのリファレンス ガイド
Azure Logic Apps のコネクタ
(Azure Logic Apps を使用して Excel Online データを管理する)[https://docs.microsoft.com/ja-jp/azure/connectors/connectors-create-api-excel]