しごと自動化レシピ

WORK RECIPE Power Query

Power Queryで分類ごとに数量加重した平均単価を出す

分類ごとに数量加重した平均単価を出す手順です。Aは単純平均150でなく金額700÷数量4の175です。 入力表と完成表を並べ、Mコードが変える列や行を具体的な架空データで確かめます。元のデータへ直接書き戻さず、更新可能なクエリとして保存する形にします。

区分 → 区分・加重単価(作業の流れを表す概念図)
変換処理を実機確認

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

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

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

確認した範囲

  • 掲載M全文を専用ExcelのPower Queryエンジンで実行
  • 入力例から独立に計算した期待表と列名・全行の値を照合
  • グループ結果は行順を区別せず比較

未確認・対象外

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

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

できあがるもの

完成表の列は 区分/加重単価、値は [["A",175],["B",50]] です。Aは単純平均150でなく金額700÷数量4の175です。 グループ化の結果は行順が変わる場合があるためキーと値の組み合わせで照合します。日付・日時・durationは表示形式が異なっても同じ値か型も確認してください。

始める前に

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

入力表は 区分/数量/単価 の3列、3行です。値は [["A",1,100],["A",3,200],["B",2,50]] です。表は以下のMコードのSourceに埋め込まれているので、シート上の表を別に作る必要はありません。

入力例を表で確認する
入力例
区分数量単価
A1100
A3200
B250

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

手順

  1. [データ]から[データの取得]→[その他のデータソースから]→[空のクエリ]を開きます。エディターの[詳細エディター]を開く前に、既存の業務クエリではなく新しい検証用クエリを選んでいることを確認します。数量は正数で単価は数値とします。返品の負数を混ぜる場合は指標定義を見直します。
  2. 詳細エディターの内容を次の完全なMコードへ置き換えます。Sourceが架空の入力表、Resultが変換結果です。日本語の列名や大文字小文字、引用符を変えずに貼り付けて[完了]を押します。
    let
        Source = #table(type table [#"区分" = text, #"数量" = number, #"単価" = number], {
            {"A", 1, 100},
            {"A", 3, 200},
            {"B", 2, 50}
        }),
        Result = Table.Group(Source,{"区分"},{{"加重単価",each let Pairs=Table.ToRecords(_), Total=List.Sum(List.Transform(Pairs,each [数量]*[単価])) in Total/List.Sum([数量]),type number}})
    in
        Result
  3. 適用したステップのSourceをクリックして入力3行を確認し、Resultへ戻して完成表と比べます。Aは単純平均150でなく金額700÷数量4の175です。 出力列は 区分/加重単価、期待行数は2件です。nullと空文字、0を別の値として確認してください。
  4. [閉じて読み込む]の読み込み先を新しいシートにして、元の入力を持つシートへ上書きしないようにします。読み込み後に[すべて更新]を一回行い、件数と値が変わらないことを確認します。数量は正数で単価は数値とします。返品の負数を混ぜる場合は指標定義を見直します。 本記事のアプリでの実行結果は未確認のため、完成表の照合を省略しないでください。
    できあがる結果を表で確認する
    できあがる結果
    区分加重単価
    A175
    B50

    Aは単純平均150でなく金額700÷数量4の175です。

期待結果と照合する

完成表の列は 区分/加重単価、値は [["A",175],["B",50]] です。Aは単純平均150でなく金額700÷数量4の175です。 グループ化の結果は行順が変わる場合があるためキーと値の組み合わせで照合します。日付・日時・durationは表示形式が異なっても同じ値か型も確認してください。

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

うまくいかないとき

  • 数量は正数で単価は数値とします。返品の負数を混ぜる場合は指標定義を見直します。
  • Expression.Errorが出た場合は、コードの列名と入力の列名、大文字小文字が一致するか調べます。入力の型を安易にanyへ変えてエラーを隠さないでください。例は小さな表向けであり、大量データに移すときは行数と更新時間も確認します。

止める・元に戻す

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

公式資料・対応範囲

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

同じツールで試す

Power Queryの記事一覧へ →