• ベストアンサー

Excelで集計の方法

A列に名前が入っています。 B列に数字(個数)が入っています。 A列にある名前は重複しています。(同じ名前が何回も出現します。) このA列にあるリストを同じシートのD列に表示し、更にE列に名前ごとの合計を出したいのですが、どうすればよいでしょうか? つまり A列   B列 太郎   50 一郎   20 花子   30 太郎   40 花子   50 一郎   50 太郎   20 これを 太郎=110 一郎=70 花子=80 としたいのです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.6

C列を作業用として使用していいものとし、説明上1行目が見出しで、 データが、2行目からあるものとします。 一応、データが1000行まであるとしています。 C2に  =IF(COUNTIF(A$2:A2,A2)=1,COUNT(C$1:C1)+1,"") D2に =IF(ISNA(MATCH(ROW()-1,C$2:C$1000,0)),"",OFFSET(A$2,MATCH(ROW()-1,C$2:C$1000,0)-1,0)) E2に =IF(D2="","",SUMIF(A$2:A$1000,D2,B$2:B$1000)) の式を入れ、それぞれ必要分下へコピーします。

take4-007
質問者

補足

C列の作業用のセルはどういう意味があるのでしょうか? 数字が入っているセルと入っていないセルがあるのですが、これは問題ないのでしょうか? この列を入れずには出来ないでしょうか?

その他の回答 (9)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.10

No.9 の表現修正 >> C列の作業用のセルはどういう意味があるのでしょうか? > 計算過程で仮に使う列のことです。    ↓ 直接目的のセルに計算式を設定すると、計算式が長くなってしまい 解りにくくなりますので、使っていない列を使用し、途中までの 計算を行うセルのことです。 こういうときは、新しいブックに提示された式をそのまま貼り付けて テストしてみるようにした方がいいですよ。 そして動作を確認した上で、式の意味を理解し、応用するのです。 それが上達の秘訣と思いますよ。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.9

No.6 の補足に対する解答です。 > C列の作業用のセルはどういう意味があるのでしょうか? 計算過程で仮に使う列のことです。 C列は、使っていようですので、GでもHでもいいですから、何処か 空いている列に変更します。 式を C からその列名に変更います。 作業用の列は、式を設定後、非表示にします。

take4-007
質問者

お礼

ありがとうございます。 新しいブックでテストしたときはうまく出来たのですが、目的のシート(ブック)をコピーして検証用としてやると思うようにできません。 1つ1つ確認しながらやっていきます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.8

次記のタイプの回答が出ていないようなので記します。 第1行目のA列,B列に、見だしフィールドとして、名前、個数と入力する。 (1)A列B列のデータのあるセルを範囲指定する。 そして、データ-並べ替えでA列をソートキーにして並べ替えます。 元に戻したいならソート前に各行に連番を振っておきます。 (2)データのある範囲(連番も含め)を指定します。 (3)データ-集計-(グループの基準)名前、 (集計方法)合計、(集計するフィールド)個数 「現在の集計表と置き変える」にチェック-OKをクリック (4)アウトラインの2レベルをクリックすると、マイナス(-)が+になり、集計行のみ残る。 (5)残った集計行を、コピーし別の範囲に貼りつける (1)のソートが必要か、と疑問を持ちましたが取り合えづのせます。

take4-007
質問者

お礼

ありがとうございます。 参考にさせていただきます。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.7

>IF文の中にある 65537 ってどういう意味があるんですか? Excelの最大行(65536)+1です。 つまり、どの行番号よりも大きな値を取る為の値です。 ただし、実質上は、仮にデータがA1~A10なら、11以上であればOK、という風にデータ範囲より下の行番号以上ならOKなんですがね。

take4-007
質問者

お礼

細かいところまでありがとうございます。 それぞれの意味を考えながらやっていきます。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.5

こんにちは。maruru01です。 かなりややこしいですが。 D1に、 =IF(ISERROR(INDEX($A$1:$A$7,SMALL(IF(MATCH($A$1:$A$7,$A$1:$A$7,0)<>ROW($A$1:$A$7),65537,ROW($A$1:$A$7)),ROW(A1)))),"",INDEX($A$1:$A$7,SMALL(IF(MATCH($A$1:$A$7,$A$1:$A$7,0)<>ROW($A$1:$A$7),65537,ROW($A$1:$A$7)),ROW(A1)))) と入力して、最後に[Enter]を押して決定する代わりに、[Ctrl]と[Shift]を押しながら[Enter]を押して決定します。 (上記の式の両端に「{}」が付いて配列数式になります。) これを下の行へコピー E2に、 =IF(D1="","",SUMPRODUCT(($A$1:$A$7=D1)*$B$1:$B$7)) と入力して(配列数式にはしません。)、下の行へコピー 式中の「$A$1:$A$7」「$B$1:$B$7」はデータ範囲ですので、適宜変更して下さい。

take4-007
質問者

補足

IF文の中にある 65537 ってどういう意味があるんですか?

  • nihonjinn
  • ベストアンサー率39% (79/200)
回答No.4

名前がわからないのならSUBTOTAL関数ですね。B列全体をSUBTOTALで合計しておいて名前をオートフィルタで任意の名前を抽出してやるとフィルタに応じて自動的に合計してくれます。

  • nihonjinn
  • ベストアンサー率39% (79/200)
回答No.3

データベース関数はどうですか DSUM関数で抽出できますが

参考URL:
http://homepage1.nifty.com/kenzo30/ex_kisotyu/ex_ks_tyukyuxb3_2.htm
  • keiri2002
  • ベストアンサー率34% (46/134)
回答No.1

sumif関数を使ってはどうでしょうか =sumif(A1:B100,"太郎”,b1:b100)

take4-007
質問者

補足

A列に出てくる名前が分かれば良いのですが、シートが多数あり、シートによって出てくる名前・頻度・名前の数がまちまちです。 その列にある名前をリストとして抽出して、同じシートの別の列に表示し、合計するにはどうしたらよいのでしょうか?

  • keiri2002
  • ベストアンサー率34% (46/134)
回答No.2

sumif関数を使ってはどうでしょうか =sumif(A1:B100,"太郎”,b1:b100)

関連するQ&A

専門家に質問してみよう