[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『週別計算をしたい。SUMIF?』(りんご)
教えて下さい。
最終的なアウトプットは下記のようにしたいですが、集計にあたり色々と条件があります。
<Output>
A B C D 1 月 売上週 A商品 B商品 2 May wk18 2 1 3 wk19 2 2 4 wk20 3 5 wk21 1 4 6 June wk22 5 7 7 wk23 4 8 wk24 4 1 9 wk25 2
やりたい事は下記ピボットで別Excelからまとめたものを、上記のようなOutputの形式にしたいです。
例えば、ピボットで集計した場合、wk22は5月と6月にまたがっていますが、outputでは最新月の方の6月にカウントしたいです。
<ピボット集計結果>
F G H I 1 月 売上週 A商品 B商品 2 5月 wk18 2 1 3 wk19 2 2 4 wk20 3 5 wk21 1 4 6 wk22 2 4 7 6月 wk22 3 3 8 wk23 4 9 wk24 4 1 10 wk25 2
自分で考えたのは、予めoutputに、5月はwk〇週〜〇週、6月はwk〇週〜〇週と調べて、表を作っておいて、そこに下記関数でA商品とB商品の足し算をSUMIFでする。
A商品の式(C2セル) =IF(SUMIF($G:$G,$B2,H:H)=0,"",SUMIF($G:$G,$B2,H:H))
理想は、outputにはwkの連番だけ最初に記入しておいて、月の切れ目もどちらになるかも含めて自動で関数(もしくはVBAで)でいれられないかと思っています。
週を計算する式は、ISOWEEKNUMを使用しています。
(その年の最初の木曜日を含む週を第 1 週とし、週の始まりを月曜日とする方式)
今回の例では5/30(月)〜6/5(日)までがwk22にあたります。
・22週が5月と6月に売り上げが跨る場合は最新の月=6月にカウントしたい。
・もし、22週が5月にしか売り上げない場合(5/30, 31は売上ありだが、6/1〜6/5は売れなかった)は22週は5月にカウントしたい。
・もし22週は全く売れなかった場合は、最新の月=6月にカウントしたい。
↓
更に、下記のケースも重なった場合、可能なら織り込みたい(但し稀なケースなので手動でやるしかないかと思っていますが…)
月によっては、最新の月の週が土日のみにあたる場合もあると思いますが、その場合は前の月にカウントしたい(土日は販売していない為))
例:2023/3/27(月)-3/31(金)まではWK13で売上無し。4/1-4/2もWK13で売上無しだが、土日の為、そもそも販売していないからWK13は3月にカウントしたい。
< 使用 Excel:Office365、使用 OS:Windows10 >
(マナ) 2022/08/13(土) 17:38
今回は複数の人で出来るようにしたいので、馴染みのある関数かマクロで対応したいと思っていますが、
関数だとこのようなケースはは厳しいでしょうか。
(りんご) 2022/08/13(土) 18:17
(マナ) 2022/08/13(土) 19:03
1.実際の商品は、何種類(何列)あるんですか?
2.最終商品列の右隣に当該行の小計が算出されているなんて事はないですか?
(半平太) 2022/08/14(日) 09:06
半平太様
実際の商品は2種類なのですが、仰る通り、A商品の内訳、B商品の内訳がピボットの小計列で隠れています。。
なので、A商品の列、B商品の列を特定して拾いたいです…。(内訳は2列の場合もあれば、3列の場合もあったりして、B商品の始まる列番号が変わってきてしまうので…。
何か良い案はありますでしょうか。
(りんご) 2022/08/14(日) 09:46
ちょっと話の展開がおかしくなった気がしますが、 実際のピボット集計結果は質問文の通りではないと言うことですか?
下図の様に商品がランダムに並んだ集計結果を利用して、A商品 B商品の2商品についてだけ、 貴希望図の様に加工したいと言うことなんですか?
<ピボット集計結果> 行 _____F_____ ___G___ __H__ ___I___ __J__ __K__ 1 合計 / 数量 商品 2 月 売上週 A商品 AC商品 B商品 総計 3 5月 wk18 2 1 1 4 4 wk19 2 2 2 6 5 wk20 3 3 6 6 wk21 1 4 4 9 7 wk22 2 2 5 9 8 5月 集計 10 9 15 34 9 6月 wk22 2 2 6 10 10 wk23 4 7 11 11 wk24 4 1 8 13 12 wk25 2 9 11 13 6月 集計 10 5 30 45 14 総計 20 14 45 79
(半平太) 2022/08/14(日) 10:41
今あるピボットテーブルを元データとするのではなく
別ブックの元データを利用します。
関数はわかりませんが、マクロでもそのほうが簡単だと思います。
1)別ブックの元データがこんな感じとして
-A- -B- -C- -D- 1 売上日 売上週 商品 売上 2 2022/5/2 wk18 A商品 1 3 2022/5/3 wk18 A商品 1
2)Power Queryで売上週と商品でグループ化して
シートにピボットテーブル形式で読み込む
let //ここで別ブックのファイルパス指定 ソース = Excel.Workbook(File.Contents("D:\***\****\*****.xlsx"), null, true), //ここで別ブックのシート名を指定 対象Sheet = ソース{[Item="Sheet1",Kind="Sheet"]}[Data], 昇格されたヘッダー数 = Table.PromoteHeaders(対象Sheet, [PromoteAllScalars=true]), 変更された型 = Table.TransformColumnTypes(昇格されたヘッダー数,{{"売上日", type date}, {"売上週", type text}, {"商品", type text}, {"売上", Int64.Type}}), 挿入された月の開始日 = Table.AddColumn(変更された型, "月の開始日", each Date.StartOfMonth([売上日]), type date), グループ化された行 = Table.Group(挿入された月の開始日, {"売上週", "商品"}, {{"合計", each List.Sum([売上]), type nullable number}, {"月", each List.Max([月の開始日]), type date}}) in グループ化された行
3)内訳というのがよくわかりませんが、たぶん ↑ に影響はないと思います。
要は、Power Queryでデータ加工した上で、ピボットテーブルにするということです。
(ピボットテーブルでなく、普通のテーブル形式で読み込んでもよいのですが)
(マナ) 2022/08/14(日) 10:45
1.A1にスタート月の初日を入れる。(例:2022/5/1)。 セル表示形式で、ユーザー定義を 「m"月開始"」と設定して「5月開始」と表示させる。
2.数式の入力 (1) M3セル(2商品計) =BYROW(H3:J100,LAMBDA(r,SUM(SUMIF(H$2:J$2,C1:D1,r))))
(2) N3セル =F3
(3) N4セル =IF(G4="","",IF(AND(G2=G4,M2,M4=0),"",IF(AND(G1=G3,M1,M3=0),F3&"",F4&""))) この数式だけは下にコピーする必要があります。(これ以外は、他のセルにコピーは不要)
(4) B2セル ="wk"&ISOWEEKNUM(WORKDAY(A1,1))+SEQUENCE(COUNTA(UNIQUE(G:G))-2,1,0) (5) C2セル =SUMIF($G2:$G100,$B2#,INDEX($H2:$K100,0,MATCH(C1,$H2:$K2,0))) (6) D2セル =SUMIF($G2:$G100,$B2#,INDEX($H2:$K100,0,MATCH(D1,$H2:$K2,0)))
(7) A2セル =XLOOKUP(B2#,G3:G100,N3:N100,"",0,-1)
<結果図> 行 ____A____ ___B___ __C__ __D__ E _____F_____ ___G___ __H__ ___I___ __J__ __K__ _L_ ___M___ _N_ 1 2022/5/1 売上週 A商品 B商品 合計 / 数量 商品 2 5月 wk18 2 1 月 売上週 A商品 AC商品 B商品 総計 2商品計 3 wk19 2 2 5月 wk18 2 1 1 4 3 5月 4 wk20 3 3 wk19 2 2 2 6 4 5 wk21 1 4 wk20 3 3 6 6 6 wk22 0 1 wk21 1 4 4 9 5 7 6月 wk23 4 7 wk22 0 2 1 3 1 8 wk24 4 8 5月 集計 10 9 15 34 25 9 wk25 0 9 6月 wk22 0 2 0 2 0 10 wk23 4 7 11 11 6月 11 wk24 4 1 8 13 12 12 wk25 2 9 11 9 13 6月 集計 10 5 30 45 40 14 総計 20 14 45 79 65 15 0
(半平太) 2022/08/14(日) 11:58
マナ様
ありがとうございます!
ご提示して頂いたコードを再現できるように、まずはPower queryいじってみたいと思います。
(りんご) 2022/08/14(日) 12:00
(りんご) 2022/08/14(日) 12:37
想定レイアウトが実態と異なるのであれば、検討は徒労になります。
(半平太) 2022/08/14(日) 13:29
代表式、
=SUMPRODUCT(($B2=OFFSET($F$1,1,1,COUNTA($G:$G)-1,1))*OFFSET($F$1,1,COLUMN()-1,COUNTA($G:$G)-1,1))
_
検証ファイル、
https://1drv.ms/x/s!AjviygfJDgV_gY80mSoI5PIx_BSY7g
_
因みに、
月次代わりの 記載条件が、
不明だったので、
其処の 抜き出しは、
してませんし、
ピボットテープルへの 数値参照のための、
式も 含めてませんよ。
_
尚、
ファイルは 1度、
ローカルに 別名保存して、
其の 保存ファイルを、
扱うように してくださいね、
別名保存でないと、
意味が 無いですよ。
_
さすれば、
閲覧も、編集も、
叶うものと 思いますよ。
(Nouble) 2022/08/18(木) 15:42
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.