[[20260106135207]] 『起点が変わるエクセルの合計について』(けずる) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『起点が変わるエクセルの合計について』(けずる)

ダウンロードした売り上げデータの集計を求められています。

DL日 店舗 商品  前日 2日前 3日前...28日前
1/6 A店 商品a   2   2   5 
1/6 A店 商品b   1   1   3 
 
といったデータがあるとします。

「28日目」の列の隣に「月曜日始まりの週合計(当週、先週、先々週)」を求めるよう指示されているのですが、
ダウンロード日によって起点が異なるのでセル指定では集計できません。

とりあえず、A列にある「DL列」から「前日」「2日前」の日付を表示するよう1行目に入れ込んでみましたが(下記)
ここからどうやって日付を元に集計できますでしょうか・・。

          1/5 1/4 1/3 ... 
DL日 店舗 商品  前日 2日前 3日前...28日前
1/6 A店 商品a   2   2   5 
1/6 A店 商品b   1   1   3 

< 使用 Excel:Excel2019、使用 OS:Windows10 >


WEEKNUM関数使ってなんとかする。とか...?

WEEKNUM関数とは?使い方や月曜始まり、週の基準設定を解説 | マネーフォワード クラウド
https://biz.moneyforward.com/work-efficiency/basic/17168/

(白茶) 2026/01/06(火) 14:31:25


 =QUOTIENT(日付+WEEKDAY(0,3),7)
 とかやると、通算の週番号みたいなものが計算できます
 年の切り替わりを気にしなくていいかも
(´・ω・`) 2026/01/06(火) 15:37:18

 こういう時はレイアウトのセル番地も明らかにしてくれると楽なんだが。
       A     B      C       D       E       AE    AF      AG     AH     
 1                         1/5     1/6     12/9 
 2   DL日   店舗   商品   前日   2日前...28日前   当週   先週   先々週
 3    1/6    A店  商品a     2      2
 のようなレイアウトだとして。

 まずAF1セルに
 =A3-WEEKDAY(A3,3)
 と入力し、AG1セルに
 =AF1-7
 と入力してAH1セルまでフィルコピー。
 これでそれぞれ当週、先週、先々週の開始日を求める。

 次にAF3セルに
 =SUMIFS($D3:$AE3,$D$1:$AE$1,">="&AF$1,$D$1:$AE$1,"<"&AF$1+7)
 と入力して右及び下へフィルコピーではどうだろうか?
(ねむねむ) 2026/01/06(火) 15:59:49

 生成AIに聞いたら出てきたMの回答を少し修正したものです
 一応動作確認はしていますが、問題ないかと思います

 このクエリで読み込んだテーブルを単純に28日前の横の列に参照させればいいでしょう

 let
     // テーブル名は適宜変更
     Source = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],

     // Unpivot
     Unpivot =
         Table.UnpivotOtherColumns(
             Source,
             {"DL日", "店舗", "商品"},
             "LagText",
             "数量"
         ),

     // 「前日」「2日前」→ 数値
     LagToNum =
         Table.AddColumn(
             Unpivot,
             "Lag",
             each
                 if [LagText] = "前日" then 1
                 else Number.FromText(Text.Replace([LagText], "日前", "")),
             Int64.Type
         ),

     // 対象日
     AddDate =
         Table.AddColumn(
             LagToNum,
             "対象日",
             each Date.AddDays([DL日], -[Lag]),
             type date
         ),

     // 週開始日(月曜)
     AddWeekStart =
         Table.AddColumn(
             AddDate,
             "週開始日",
             each Date.StartOfWeek([対象日], Day.Monday),
             type date
         ),

     // 週区分(当週/先週/先々週)
     AddWeekType =
         Table.AddColumn(
             AddWeekStart,
             "週区分",
             each
                 let
                     baseWeek = Date.StartOfWeek([DL日], Day.Monday)
                 in
                     if [週開始日] = baseWeek then "当週"
                     else if [週開始日] = Date.AddDays(baseWeek, -7) then "先週"
                     else if [週開始日] = Date.AddDays(baseWeek, -14) then "先々週"
                     else if [週開始日] = Date.AddDays(baseWeek, -21) then "3週前"
                     else if [週開始日] = Date.AddDays(baseWeek, -28) then "4週前"
                     else null,
             type text
         ),

     // 必要な週だけ残す
     Filtered =
         Table.SelectRows(AddWeekType, each [週区分] <> null),

     // 集計
     Grouped =
         Table.Group(
             Filtered,
             {"DL日", "店舗", "商品", "週区分"},
             {{"週合計", each List.Sum([数量]), Int64.Type}}
         ),

     // 横持ちに戻す
     Pivot =
         Table.Pivot(
             Grouped,
             {"当週", "先週", "先々週", "3週前", "4週前"},
             "週区分",
             "週合計",
             List.Sum
         )
 in
     Pivot
(Asa) 2026/01/06(火) 19:49:51

 else if [週開始日] = Date.AddDays(baseWeek, -21) then "3週前"
 else if [週開始日] = Date.AddDays(baseWeek, -28) then "4週前"

 この二行削除と

 Grouped,
 {"当週", "先週", "先々週", "3週前", "4週前"},

 ↓変更

 Grouped,
 {"当週", "先週", "先々週"},

 すれば先々週までだけになります
(Asa) 2026/01/06(火) 19:57:32

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.