Excel (一般機能)

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

 
(Windows 10全般 : Excel 2019)
ピボットテーブルで条件を追加したい
投稿日時: 23/03/29 10:15:49
投稿者: coin

ピボットテーブルで年度の条件にないものを表示させたいと思っています。
 
勘定科目|年度|購入|単価|金額
交通費 2021 ○→○ 350 700
交通費 2022 △→△ 200 400
接待交際 2021 手土産|2,100|2,100
 
2021年と2022を比べて、「2021年だけに発生しているもの」を抜き出したいと思っています。
 
上の例だと
接待交際 2021 手土産
 
どのように考えれば、ここまでたどり付けれるのか、教えて頂ければと思います。
 
すみませんが、宜しくお願い致します。

回答
投稿日時: 23/03/29 10:50:51
投稿者: んなっと

FILTER関数が使えるなら
 
     A   B    C   D      E F     G   H    I
3 勘定科目 年度  購入 単価 合計 / 金額              
4  交通費 2021 ○→○  350     700    光熱費 2021 あ電力
5  交通費 2022 △→△  200     400   接待交際 2021 手土産
6  光熱費 2021 あ電力 5300     5300              
7 接待交際 2021 手土産 2100     2100              
 
G4
=FILTER(A4:C100,(B4:B100=2021)*(COUNTIFS(A4:A100,A4:A100,B4:B100,2022)=0))

投稿日時: 23/03/29 11:08:44
投稿者: coin

んなっと 様
 
ご回答ありがとうございます。
バージョンが違うため、filter関数が使えないんです。
申し訳ございません。Excel2019なんです。
 
ただ、良いヒントになりましたので、別の関数を検索して、挑戦してみようと思っています。
ありがとうございます。

回答
投稿日時: 23/03/29 11:40:48
投稿者: んなっと

だいじょうぶですよ。
AGGREGATE(15,6,行番号/(条件1)/(条件2),1)
で、条件1,条件2を満たす1番目行番号が得られます。
 
G4
=IFERROR(INDEX(A:A,AGGREGATE(15,6,ROW($4:$100)/($B$4:$B$100=2021)/(COUNTIFS($A$4:$A$100,$A$4:$A$100,$B$4:$B$100,2022)=0),ROW(G1))),"")
右方向・→下方向・↓

投稿日時: 23/03/29 14:03:53
投稿者: coin

んなっと 様
 
ご丁寧にありがとうございます。
助かります。
 
データが膨大にあって、2万件程あります。
関数を設定すると、再計算が走って、固まってしまう状況です。

回答
投稿日時: 23/03/29 15:04:53
投稿者: んなっと

2万件
そんなにあるということは、この表はピボットテーブルの結果ではないのですね。
集計前の元データだと。

     A   B    C   D      E
3 勘定科目 年度  購入 単価 合計 / 金額              
4  交通費 2021 ○→○  350     700
5  交通費 2022 △→△  200     400
6  光熱費 2021 あ電力 5300     5300              
7 接待交際 2021 手土産 2100     2100              
  
  
もしそうなら、ピボットテーブルではなくてPowerQueryがおすすめです。
  
 データ
→テーブルまたは範囲から
→先頭行〜にチェックを入れてOK
→詳細エディター
→以下に書き換え(Trf=の行は必要に応じて変更)
  
let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    Trf = Table.TransformColumnTypes(ソース,{{"勘定科目", type text}, {"年度", Int64.Type}, {"購入", type text}, {"単価", Int64.Type}, {"金額", Int64.Type}}),
    Del = Table.SelectColumns(Trf,{"勘定科目", "年度", "購入"}),
    Uni = Table.Distinct(Del),
    Flt1 = Table.SelectRows(Uni, each ([年度] = 2021)),
    Flt2 = Table.SelectRows(Uni, each ([年度] = 2022)),
    Mrg = Table.NestedJoin(Flt1, {"勘定科目"}, Flt2, {"勘定科目"}, "Flt2", JoinKind.LeftOuter),
    Del2 = Table.SelectColumns(Mrg,{"勘定科目", "年度", "購入"})
in
    Del2
  
→完了
→閉じて読み込む

投稿日時: 23/03/29 16:43:40
投稿者: coin

んなっと 様
 
本当にありがとうございます。
 
やってみましたが、重複レコードが発生している状況です。
 
結果は以下の通り
 
勘定科目 年度 購入
交際費 2021 1,000
交際費 2021 3,000
事務用品 2021 600←これだけにしたい。
支払利息 2021 300
支払利息 2021 150
 
私も、ネットで調べてみておりますが、思った通りに出来ない状況です。
 
本当にすみません。
宜しくお願い致します。

回答
投稿日時: 23/03/29 17:32:05
投稿者: んなっと

1か所間違えていました。JoinKind.LeftAnti に修正。
 
let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    Trf = Table.TransformColumnTypes(ソース,{{"勘定科目", type text}, {"年度", Int64.Type}, {"購入", type text}, {"単価", Int64.Type}, {"金額", Int64.Type}}),
    Del = Table.SelectColumns(Trf,{"勘定科目", "年度", "購入"}),
    Uni = Table.Distinct(Del),
    Flt1 = Table.SelectRows(Uni, each ([年度] = 2021)),
    Flt2 = Table.SelectRows(Uni, each ([年度] = 2022)),
    Mrg = Table.NestedJoin(Flt1, {"勘定科目"}, Flt2, {"勘定科目"}, "Flt2", JoinKind.LeftAnti),
    Del2 = Table.SelectColumns(Mrg,{"勘定科目", "年度", "購入"})
in
    Del2

投稿日時: 23/03/30 08:45:24
投稿者: coin

 んなっと様
 
本当に色々とありがとうございました。
無事解決致しました。
 
自分でコマンドとか調べるべき所、提示して頂きまして、ありがとうございます。