🤖

【PowerAutomate】日付と時刻のシリアル値をMicrosoft Listsに日時形式で登録する方法

2024/09/30に公開

はじめに

PowerAutomate上でExcel(OneDrive or Sharepoint)のテーブルから取得した日付と時刻のシリアル値[1]の形を整え、Microsoft Listsに登録する方法について解説します。

結論

以下の関数を③Microsoft Listsの入力値として代入すると正しく日本時間の日時がListsに表示されるようになります。

addSeconds('1899-12-30',int(sub(mul(add(float(outputs('行の取得')?['body/時間']),float(outputs('行の取得')?['body/日付'])),86400),32400)))

詳細解説

  • outputs('行の取得')?['body/時間']、outputs('行の取得')?['body/日付']
    行取得の際の値をそれぞれ「時間」「日付」として取得します。実態に合わせて文言は書き換えてください。
  • float(...):
    エクセルから取得した際はString型となっています。この後の計算実行のためにfloat型に変換します。
  • mul(add(float(...),float(...)),86400)
    シリアル値の日数部分と小数部分(時間)をそれぞれ秒に変換して合計します。(1日は86400秒)つまり、1899年12月30日から何秒経った日時である必要があるかを計算します。
  • int(sub(...,32400)):
    (UTC+09:00)大阪、札幌、東京のタイムゾーンに変換します。この後の計算実行のためにint型に変換します。
  • addSeconds('1899-12-30', ...):
    1899年12月30日から秒単位で時間を追加します。
脚注
  1. Excelのシリアル値とは、1900/1/1を「1」とした連番であり、通常行の取得で得られる値はシリアル値となる。
    日付シリアル値
     日付シリアル値は、1900年1月1日を1としてカウントしている。1日は1.0に相当して、次の日は2.0、そしてその次の日は3.0という形でどんどん計算されていく。(例:45525 は 1900年1月1日から 45525 日後、つまり 2024年8月21日を指している。)
    時間シリアル値
     時間シリアル値は、1日(24時間)を1.0としてカウントしている。具体的には、1時間は約0.04167(1/24 ≈ 0.04167)になる。(例:0.458333333333333 は 24時間のうちの45.8333333% を示している。) ↩︎

Discussion