Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : Microsoft 365)
ピボット集計表に勝率を入れたい
投稿日時: 23/01/24 10:06:53
投稿者: chibikko

曜日名	勝敗
日曜日	−
月曜日	●
火曜日	−
水曜日	○
木曜日	○
金曜日	−
土曜日	−
日曜日	●
月曜日	−
火曜日	○
水曜日	−
木曜日	●
金曜日	−
土曜日	○
日曜日	−
日曜日	−
月曜日	○
火曜日	−
水曜日	○
木曜日	○
金曜日	−
︙
︙

上記の様な元データテーブルから、下記の様なピボット集計表を作成したのですが、
個数 / 勝敗			
曜日名	○	●	総計
日曜日	1	2	3
月曜日	2	1	3
火曜日	2	0	2
水曜日	3	1	4
木曜日	2	2	4
金曜日	1	0	1
土曜日	3	1	4 *総計=勝敗総計

総計の右側に勝率を追加したいのですが可能でしょうか。
集計フィールドからの作成も試みましたが、出来ずに悩んでいます。
最終的には、下表の様なピボット集計表になればと思っています。
個数 / 勝敗	勝敗			
曜日名	○	●	総計	勝率
日曜日	1	2	3	0.333 
月曜日	2	1	3	0.667 
火曜日	2	0	2	1.000 
水曜日	3	1	4	0.750 
木曜日	2	2	4	0.500 
金曜日	1	0	1	1.000 
土曜日	3	1	4	0.750 *総計=勝敗総計

回答
投稿日時: 23/01/24 11:00:49
投稿者: んなっと

元データに下のように○と●の2列を追加する方法です。
 
     A   B  C  D
 1 曜日名 勝敗 ○ ●
 2 日曜日  −  0  0
 3 月曜日  ●  0  1
 4 火曜日  −  0  0
 5 水曜日  ○  1  0
 6 木曜日  ○  1  0
 7 金曜日  −  0  0
 8 土曜日  −  0  0
 9 日曜日  ●  0  1
10 月曜日  −  0  0
11 火曜日  ○  1  0
12 水曜日  −  0  0
13 木曜日  ●  0  1
14 金曜日  −  0  0
15 土曜日  ○  1  0
16 日曜日  −  0  0
17 日曜日  −  0  0
18 月曜日  ○  1  0
19 火曜日  −  0  0
20 水曜日  ○  1  0
21 木曜日  ○  1  0
22 金曜日  −  0  0
 
C2
=IF($B2=C$1,1,0)
下方向・↓
D2
=IF($B2=D$1,1,0)
下方向・↓
→テーブルとして書式設定
 
→ピボットテーブルを作成する
→曜日名を行に、〇、●をΣ値に
 ※こんなふうになります。
 
     A  B  C
 3 曜日名  ○  ●
 4 日曜日  0  1
 5 月曜日  1  1
 6 火曜日  1  0
 7 水曜日  2  0
 8 木曜日  2  1
 9 金曜日  0  0
10 土曜日  1  0
11  総計  7  3
 
→ピボットテーブル分析
→フィールド/アイテム/セット
→集計フィールド
→名前: 総計
 数式:=○+●
→OK
 
→フィールド/アイテム/セット
→集計フィールド
→名前: 勝率
 数式:=IF(総計=0,0,○/総計)
→OK
 
     A  B  C   D      E
 3 曜日名  ○  ●  総計     勝率
 4 日曜日  0  1   1      0
 5 月曜日  1  1   2     0.5
 6 火曜日  1  0   1      1
 7 水曜日  2  0   2      1
 8 木曜日  2  1   3 0.666666667
 9 金曜日  0  0   0      0
10 土曜日  1  0   1      1
11  総計  7  3   10     0.7

投稿日時: 23/01/24 11:25:50
投稿者: chibikko

んなっと さんの引用:
元データに下のように○と●の2列を追加する方法です。

 
ご回答いただきありがとうございます。
元データに列追加をしないで出来る方法がベストなのですが……。

回答
投稿日時: 23/01/24 11:54:15
投稿者: んなっと

希望通りのレイアウトにはなりませんが...
 
       A   B  C
 3 個数 / 勝敗 勝敗  
 4    曜日名  ○ ●
 5    日曜日     1
 6    月曜日   1  1
 7    火曜日   1  
 8    水曜日   2  
 9    木曜日   2  1
10    土曜日   1  
11     総計   7  3
 
→画面右端のフィールドリストウで、[勝敗]をCtrlキーを押しながらΣ値に再度ドラッグ
 
     A      B       C      D       E
 3         勝敗      値              
 4          ○             ●       
 5 曜日名 個数 / 勝敗 個数 / 勝敗2 個数 / 勝敗 個数 / 勝敗2
 6 日曜日                    1       1
 7 月曜日      1       1      1       1
 8 火曜日      1       1              
 9 水曜日      2       2              
10 木曜日      2       2      1       1
11 土曜日      1       1              
12  総計      7       7      3       3
 
→Σ値に新しくできた[勝敗2]の右のvをクリックして「値フィールドの設定」
→計算の種類 行集計に対する比率
 表示形式 標準
→OK→OK
→ピボットテーブルの個数 / 勝敗2 のセルをダブルクリックして 勝率 に変更
→ピボットテーブル上で右クリック
→ピボットテーブルオプション
→表示
→従来のピボットテーブルレイアウトを使用する
→○のセルをクリック、セル境界付近でマウスカーソルの形が十字矢印になったらド ラッグして、●の右に来るようにする
→C列非表示に
 
     A      B       D      E
 3         勝敗              
 4          ●       ○       
 5 曜日名 個数 / 勝敗  個数 / 勝敗     勝率
 6 日曜日      1              0
 7 月曜日      1       1     0.5
 8 火曜日              1      1
 9 水曜日              2      1
10 木曜日      1       2 0.666666667
11 土曜日              1      1
12  総計      3       7     0.7

回答
投稿日時: 23/01/24 12:16:45
投稿者: んなっと

いっそのことピボットテーブルは使わずに
  
     A   B C D    E  F  G   H
 1 曜日名 勝敗        ○ ● 勝率
 2 日曜日  −    日曜日       
 3 月曜日  ●    月曜日       
 4 火曜日  −    火曜日       
 5 水曜日  ○    水曜日       
 6 木曜日  ○    木曜日       
 7 金曜日  −    金曜日       
 8 土曜日  −    土曜日       
 9 日曜日  ●              
10 月曜日  −              
11 火曜日  ○              
12 水曜日  −              
13 木曜日  ●              
14 金曜日  −              
15 土曜日  ○              
16 日曜日  −              
17 日曜日  −              
18 月曜日  ○              
19 火曜日  −              
20 水曜日  ○              
21 木曜日  ○              
22 金曜日  −              
  
としてから
F2
=LET(v,COUNTIFS(A:A,E2:E8,B:B,F1:G1),HSTACK(v,BYROW(v,LAMBDA(i,IFERROR(TAKE(i,,1)/SUM(i),"")))))
  
     A   B C D    E  F  G     H
 1 曜日名 勝敗        ○ ●   勝率
 2 日曜日  −    日曜日  0  1     0
 3 月曜日  ●    月曜日  1  1    0.5
 4 火曜日  −    火曜日  1  0     1
 5 水曜日  ○    水曜日  2  0     1
 6 木曜日  ○    木曜日  2  1 0.666667
 7 金曜日  −    金曜日  0  0     
 8 土曜日  −    土曜日  1  0     1
 9 日曜日  ●                
10 月曜日  −                
11 火曜日  ○                
12 水曜日  −                
13 木曜日  ●                
14 金曜日  −                
15 土曜日  ○                
16 日曜日  −                
17 日曜日  −                
18 月曜日  ○                
19 火曜日  −                
20 水曜日  ○                
21 木曜日  ○                
22 金曜日  − 

回答
投稿日時: 23/01/24 13:50:24
投稿者: taitani
投稿者のウェブサイトに移動

Pivotじゃなくてもいいよなら、PowerQuery の方が良いと思います。
エディター>詳細エディターで、以下を貼り付けてください。
’---------------------

let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"曜日名", type text}, {"勝敗", type text}}),
    追加された条件列 = Table.AddColumn(変更された型, "勝", each if [勝敗] = "○" then 1 else 0),
    追加された条件列1 = Table.AddColumn(追加された条件列, "負", each if [勝敗] = "●" then 1 else 0),
    グループ化された行 = Table.Group(追加された条件列1, {"曜日名"}, {{"勝", each List.Sum([勝]), type number}, {"負", each List.Sum([負]), type number}}),
    追加されたカスタム = Table.AddColumn(グループ化された行, "総数", each [勝]+[負]),
    追加されたカスタム1 = Table.AddColumn(追加されたカスタム, "勝率", each [勝]/[総数]),
    変更された型1 = Table.TransformColumnTypes(追加されたカスタム1,{{"勝率", Percentage.Type}}),
    置換されたエラー = Table.ReplaceErrorValues(変更された型1, {{"勝率", 0}})
in
    置換されたエラー

’---------------------
※ テーブル1部分は、テーブル名です。
※ 元データテーブルの見えているデータでの集計結果です。
 
曜日名	勝	負	総数	勝率
日曜日	0	1	1	0.0%
月曜日	1	1	2	50.0%
火曜日	1	0	1	100.0%
水曜日	2	0	2	100.0%
木曜日	2	1	3	66.7%
金曜日	0	0	0	0.0%
土曜日	1	0	1	100.0%

回答
投稿日時: 23/01/24 14:13:53
投稿者: んなっと

うっかり総計を忘れていました。
  
     A   B C D    E  F  G   H     I
 1 曜日名 勝敗        ○ ● 総計   勝率
 2 日曜日  −    日曜日  0  1   1     0
 3 月曜日  ●    月曜日  1  1   2    0.5
 4 火曜日  −    火曜日  1  0   1     1
 5 水曜日  ○    水曜日  2  0   2     1
 6 木曜日  ○    木曜日  2  1   3 0.666667
 7 金曜日  −    金曜日  0  0   0     
 8 土曜日  −    土曜日  1  0   1     1
 9 日曜日  ●                   
10 月曜日  −                   
  
F2
=LET(v,COUNTIFS(A:A,E2:E8,B:B,F1:G1),w,BYROW(v,LAMBDA(i,SUM(i))),HSTACK(v,w,IFERROR(TAKE(v,,1)/w,"")))

投稿日時: 23/01/24 15:07:48
投稿者: chibikko

んなっと様、taitani様
 
ご回答ありがとございました。
 
PowerQueryでなんとか思い通りのものが出来ました。