• ベストアンサー

エクセル・数値を足して出力するには

さきほど、tarte777という名前で質問をした者です。なぜかそちらでログインできなくなってしまったので、こちらのIDで再度質問をさせていただきます。 画像の左のような表があるとします。 いくつかのコード番号と数値が入っていますが、これを画像右の表のように、数値を足して出力したいと思います。 実際にはコード番号は数万あり、1つのコードにつき1~7つくらいの数値を足す必要があります。 表を変形してもいいですし、他の場所や他のシートに出力する形でもかまいません。 この作業を非常に多く行わなければならないため、一度に行う方法があればご教授をお願いします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 先ほど回答した者です・・・ 前回と似たような方法になります。 ↓の画像のようにC列を作業列として、 C2セルに =IF(COUNTIF($A$2:A2,A2)=1,ROW(),"") という数式を入れ、オートフィルでずぃ~~~!っと下へコピー! E2セルに =IF(COUNT(C:C)<ROW(A1),"",INDEX(A:A,SMALL(C:C,ROW(A1)))) F2セルに =IF(E2="","",SUMIF(A:A,E2,B:B)) という数式を入れ前回同様にオートフィルで下へコピーすると 画像のような感じになります。 ※ > 実際にはコード番号は数万あり・・・ とありますので、オートフィルでコピーも大変かもしれません。 もし途中に空白セルがないのであれば、 作業列のC2セルのフィルハンドルでダブルクリックでOKかと思います。m(_ _)m

その他の回答 (5)

  • tamiemon96
  • ベストアンサー率49% (658/1341)
回答No.6

縦1列の表と考えてよろしければ・・・ (1) 一番左の空欄に 連番のIDを入れましょう(後で並べ替えを戻せるように)。 (2) コード番号順にソートします。 (3) エクセルの集計機能で コード番号欄をグループの基準にして 数値欄の合計を出します。 (4) 集計結果は合計の行だけ表示する。  誰にでも使える、スタンダードな方法だと思いますが。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

No4の回答の訂正です。 D2セルに入力する数式ですが、最も小さい値(コード番号)が1つしかない場合は、D1セルの文字列がA列にもあるため、結果として2つ目の値を返しますので、最小値が得られるように「=MIN(A:A)」の数式に変更してください(前の回答のD2セルを下方向にオートフィルしたD3以下の数式はそのままでもOKです)。 D2セルに同じ数式を入力して下方向にオートフィルしたい場合は、COUNTIF関数の範囲を列全体ではなく$A$2:$A$10000のように絶対参照んしいた数式にしてください。 =IF(OR(D1="",D1=MAX(A:A)),"",SMALL(A:A,COUNTIF($A$2:$A$10000,"<="&D1)+1))

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

コード番号が例示のデータのように数字なら、以下のような数式がメモリーへの負担が少なくてよいと思います。 D2セル =IF(OR(D1="",D1=MAX(A:A)),"",SMALL(A:A,COUNTIF(A:A,"<="&D1)+1)) E2セル =IF(D2="","",SUMIF(A:A,D2,B:B))

noname#204879
noname#204879
回答No.3

E2: =SUMPRODUCT((A$2:A$10=D2)*(B$2:B$10))

  • yui56544
  • ベストアンサー率69% (85/123)
回答No.2

SUMIF関数が一番簡単かもしれません。 添付画像のような場合だとすると E2セルに =SUMIF($A$2:$A$10,$D2,$B$2:$B$10) と入力して下にオートフィルで引っ張ります この関数を説明すると、こういう意味になります。 「D2セルと同じ値をA2~A10の間で探して、該当したB2~B10セルの数値の合計を算出します」

関連するQ&A