- ベストアンサー
エクセルの関数
下記の様に、『Aセル=グループ種別』『Bセル=参加者名』『Cセル=性別』の表があるのですが、別の形態に集計し直したく、悩んでおります。 --------- グループ|参加者名| --------- A | ○さん | --------- A | ○さん | --------- A | △さん | --------- B | ○さん | --------- B | □さん | --------- C | △さん | --------- 上記の様な表を、下記のように『同一グループ』かつ『同一参加者名毎』の『個数』となるように、エクセルの関数を使って集計したいのですが、何か方法ございますでしょうか? 尚、ピボットテーブルを使えばできる事は承知してるんですが、今回はピボットテーブルを使えない事情がある為、関数でできればと思いご質問しました。 ------------ グループ|参加者名|個数 | ------------ A | ○さん | 2 | ------------ A | △さん | 1 | ------------ B | □さん | 1 | ------------ B | ○さん | 1 | ------------ C | △さん | 1 | ------------ 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
作業列を2列使う例です。ご参考まで。 ....................A.................B........C.....D............E............F.....G ..1....グループ...参加者名.................................................... ..2..................A...............○....A○.....2............A..........○.....2 ..3..................A...............○....A○...................A..........△......1 ..4..................A...............△....A△.....4............B..........○......1 ..5..................B...............○....B○.....5............B..........□......1 ..6..................B...............□....B□.....6............C..........△......1 ..7..................C...............△....C△.....7....#NUM!....#NUM!....... データ数によらず対応できる様にしたつもりで、その分長くなっています。 E,F列のエラーを出さないようにすると、更に長くなると思われるので、トライしておりません。 C2の式=A2&B2 D2の式=IF(COUNTIF(OFFSET($C$2,0,0,ROW(D1),1),C2)>1,"",ROW()) E2の式=INDEX(OFFSET($A$1,0,0,COUNTA($A:$A),1),SMALL(OFFSET($D$2,0,0,COUNTA($A:$A)-1,1),ROW(A1)),1) F2の式=INDEX(OFFSET($B$1,0,0,COUNTA($A:$A),1),SMALL(OFFSET($D$2,0,0,COUNTA($A:$A)-1,1),ROW(A1)),1) G2の式=IF(ISERROR(E2),"",COUNTIF(OFFSET($C$2,0,0,COUNTA($A:$A)-1,1),E2 & F2))
その他の回答 (3)
- imogashine
- ベストアンサー率0% (0/4)
No.2 どう考えているか知らないが、 →どう考えようと、あなたに文句を言われる筋合いではない。また、あなたが知る必要も無い。そもそも、わからないから質問しているのに、「どう考えている」と言われても・・。 B列の名前は同姓同名もいる可能性があるので、ソウは行かないので難しい。 →何の手がかりも無く、同姓同名の別人を区別できるとは、誰も考えないから、あなたが無意味・無駄なことを心配する必要は無い。それとも、質問者を馬鹿にしているのか。 作業列にA列+B列の結合セル列を作り、その列で、データーフィルターフィルタオプションの設定の操作をして、重複なきデータを作るのが良い。 →「エクセルの関数を使って集計したい」という、質問の大前提を無視しての回答とは、あなたの読解力には脱帽です。是非、質問の趣旨に沿った内容で、再度回答をお願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
どう考えているか知らないが、A+B列について、2列について重複しないリストを作ることは関数ではたやすくない。 それが出てしまえば、Countif関数で出来る。 1列だけならA列で第1行目からの件数が1のものを拾えばよいが、B列の名前は同姓同名もいる可能性があるので、ソウは行かないので難しい。 作業列にA列+B列の結合セル列を作り、その列で、データーフィルターフィルタオプションの設定の操作をして、重複なきデータを作るのが良い。 例データ グループ 氏名 作業列 A 山田 A山田 A 川上 A川上 A 山田 A山田 A 渡辺 A渡辺 C 山田 C山田 C 佐藤 C佐藤 A 山田 A山田 A 木村 A木村 B 下村 B下村 C 渡辺 C渡辺 B 鈴木 B鈴木 C 渡辺 C渡辺 C 山田 C山田 B 下村 B下村 B 下村 B下村 C列はC2に=A2&B2 下方向に式複写 ーーーーー K1:M1に グループ 氏名 作業列 をコピー ー A1:C16範囲指定 データーフィルターフィルタオプションの設定 指定した範囲にチェック リスト範囲 A1:C16 検索条件範囲 Sheet1!$M$1 <-いままでは1列だけを問題にすればよい場合がほとんどだったが、小生には初めてだが、こうすると C列の重複しない行の、A-C列を持ってこれるようだ。(注) 抽出範囲 Sheet1!$K$1:$M$16 「重複するレコードは無視する」にチェック OK 結果 グループ 氏名 作業列 A 山田 A山田 A 川上 A川上 A 渡辺 A渡辺 C 山田 C山田 C 佐藤 C佐藤 A 木村 A木村 B 下村 B下村 C 渡辺 C渡辺 B 鈴木 B鈴木 件数は、1列のカウントなのでCOUNTIFでよくて N2に =COUNTIF($C$2:$C$16,M2) 下方向に式を複写 結果 グループ 氏名 作業列 件数 A 山田 A山田 3 A 川上 A川上 1 A 渡辺 A渡辺 1 C 山田 C山田 2 C 佐藤 C佐藤 1 A 木村 A木村 1 B 下村 B下村 3 C 渡辺 C渡辺 2 B 鈴木 B鈴木 1 ーーー (注)の部分がうまく行くか心配だが、類推してやってみてください。
お礼
ご回答ありがとうございました。教えていただいた方法を参考にして、自分なりトライ&エラーしながら何とか目的を達成できました。
作業列としてD,E列を使います。また、表の最下行の次の行は空行にします。 (1)A列とB列でデータを並べ変える(昇順または降順に) (2)D2セルに =IF(A2<>A1,1,IF(B2<>B1,1,D1+1)) E2セルに =IF(D2<D3,"",1) と入力して、それぞれ下へコピー (3)オートフィルタで、E列のセルが 1 となっているものを抽出 これでお望みの結果が得られるでしょうか。
お礼
ご回答ありがとうございました。教えていただいた方法を参考にして、自分なりトライ&エラーしながら何とか目的を達成できました。
お礼
ご回答ありがとうございました。教えていただいた方法を参考にして、自分なりトライ&エラーしながら何とか目的を達成できました。