しごと自動化レシピ

WORK RECIPE Power Query

Power Queryで開始日と日数から予定の各日を明細へ展開する

開始日と日数から予定の各日を明細へ展開する手順です。日数2のAは開始当日と翌日の二行になります。 入力表と完成表を並べ、Mコードが変える列や行を具体的な架空データで確かめます。元のデータへ直接書き戻さず、更新可能なクエリとして保存する形にします。

案件 → 案件(作業の流れを表す概念図)
変換処理を実機確認

Windows版ExcelのPower Queryで、サンプルデータの変換結果を確認しました。

確認日:2026年10月19日(日本時間)

確認した内容と、確認していない範囲

確認した範囲

  • 掲載M全文を専用ExcelのPower Queryエンジンで実行
  • 入力例から独立に計算した期待表と列名・全行の値を照合

未確認・対象外

  • GUIクリック手順・他OS・他Excel版・実業務データ

数式・コードの処理結果を確認した記録です。記事の全画面操作を確認したものではありません。Excel等のバージョンや検証方法の詳細は実行確認の記録(JSON)で参照できます。

できあがるもの

完成表の列は 案件/開始/日数/予定日、値は [["A","2026-10-01",2,"2026-10-01"],["A","2026-10-01",2,"2026-10-02"],["B","2026-10-03",1,"2026-10-03"]] です。日数2のAは開始当日と翌日の二行になります。 グループ化の結果は行順が変わる場合があるためキーと値の組み合わせで照合します。日付・日時・durationは表示形式が異なっても同じ値か型も確認してください。

始める前に

  • Windows版Excel for Microsoft 365に含まれるPower Queryエディターを対象とします。Excelの画面名・メニューは更新状態で異なる場合があります。Power BIやMac版の画面操作は本記事では確認していません。
  • 新しい検証ブックで空のクエリを一つ作成します。コード中の架空表だけを使う自己完結例であり、実ファイル・Web・データベースへの接続権限や認証情報は必要ありません。
入力例

入力表は 案件/開始/日数 の3列、2行です。値は [["A","2026-10-01",2],["B","2026-10-03",1]] です。表は以下のMコードのSourceに埋め込まれているので、シート上の表を別に作る必要はありません。

入力例を表で確認する
入力例
案件開始日数
A2026-10-012
B2026-10-031

掲載手順と同じ小さな入力例です。まずは、この値で試してください。

手順

  1. [データ]から[データの取得]→[その他のデータソースから]→[空のクエリ]を開きます。エディターの[詳細エディター]を開く前に、既存の業務クエリではなく新しい検証用クエリを選んでいることを確認します。開始日を含む暦日で展開します。土日祝日除外はこの処理の対象外です。
  2. 詳細エディターの内容を次の完全なMコードへ置き換えます。Sourceが架空の入力表、Resultが変換結果です。日本語の列名や大文字小文字、引用符を変えずに貼り付けて[完了]を押します。
    let
        Source = #table(type table [#"案件" = text, #"開始" = text, #"日数" = number], {
            {"A", "2026-10-01", 2},
            {"B", "2026-10-03", 1}
        }),
        Result = let Added=Table.AddColumn(Source,"予定日",each List.Dates(Date.FromText([開始],[Format="yyyy-MM-dd",Culture="en-US"]),[日数],#duration(1,0,0,0)),type list) in Table.ExpandListColumn(Added,"予定日")
    in
        Result
  3. 適用したステップのSourceをクリックして入力2行を確認し、Resultへ戻して完成表と比べます。日数2のAは開始当日と翌日の二行になります。 出力列は 案件/開始/日数/予定日、期待行数は3件です。nullと空文字、0を別の値として確認してください。
  4. [閉じて読み込む]の読み込み先を新しいシートにして、元の入力を持つシートへ上書きしないようにします。読み込み後に[すべて更新]を一回行い、件数と値が変わらないことを確認します。開始日を含む暦日で展開します。土日祝日除外はこの処理の対象外です。 本記事のアプリでの実行結果は未確認のため、完成表の照合を省略しないでください。
    できあがる結果を表で確認する
    できあがる結果
    案件開始日数予定日
    A2026-10-0122026-10-01
    A2026-10-0122026-10-02
    B2026-10-0312026-10-03

    日数2のAは開始当日と翌日の二行になります。

期待結果と照合する

完成表の列は 案件/開始/日数/予定日、値は [["A","2026-10-01",2,"2026-10-01"],["A","2026-10-01",2,"2026-10-02"],["B","2026-10-03",1,"2026-10-03"]] です。日数2のAは開始当日と翌日の二行になります。 グループ化の結果は行順が変わる場合があるためキーと値の組み合わせで照合します。日付・日時・durationは表示形式が異なっても同じ値か型も確認してください。

まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。

うまくいかないとき

  • 開始日を含む暦日で展開します。土日祝日除外はこの処理の対象外です。
  • Expression.Errorが出た場合は、コードの列名と入力の列名、大文字小文字が一致するか調べます。入力の型を安易にanyへ変えてエラーを隠さないでください。例は小さな表向けであり、大量データに移すときは行数と更新時間も確認します。

止める・元に戻す

検証用に追加したクエリと新しい出力シートを削除するか、開始前の保存版を開き直します。元ファイル・外部サービスの更新や削除は行わないコードです。本番クエリへ採用する前に複製を作り、入力行数・出力行数・エラー件数を比較できる状態にしてください。

公式資料・対応範囲

参照日:2026-10-19。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。

同じツールで試す

Power Queryの記事一覧へ →