- ベストアンサー
Excelシリアル番号別に数の和を算出する方法
- Excelを使用して、D列に昇順で並んだシリアル番号と、それに対応するAN列の数字の和を求める方法を教えてください。
- AN5の数字の和を求める方法や、AN20からAN27までのセル内の数字の和を求める方法を教えてください。
- Excelには約1万行に約1000のシリアル番号があり、手作業では時間がかかってしまいます。効率的な方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
BJ1のセルに =IF(D1<>D2,SUMIF(D:D,D1,AN:AN),"") と入力して、下方向にコピー。
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 横からお邪魔します。 VBAでの一例です。 シートモジュールにしていますので、 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub Sample() 'この行から Dim i As Long Application.ScreenUpdating = False For i = 2 To Cells(Rows.Count, "D").End(xlUp).Row '←2行目~D列最終行まで If WorksheetFunction.CountIf(Range(Cells(2, "D"), Cells(i, "D")), Cells(i, "D")) = 1 Then Cells(i, "BJ") = WorksheetFunction.SumIf(Range("D:D"), Cells(i, "D"), Range("AN:AN")) End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ データは2行目以降にあるとしています。 こんな感じではどうでしょうか?m(_ _)m
お礼
ご回答ありがとうございます。 早速試してみます。
- emaxemax
- ベストアンサー率35% (44/124)
ご要望のマクロの一例です。 Sub test01() Dim myV, myW, myX Dim myRng As Range Dim i As Long, j As Long, tmp As Long Set myRng = Range("D2", Cells(Rows.Count, "D").End(xlUp)) myW = myRng.Offset(, 36).Value myV = myRng.Resize(myRng.Count + 1, 1).Value j = UBound(myW, 1) ReDim myX(1 To j, 1 To 1) For i = LBound(myV, 1) To j If myV(i, 1) <> myV(i + 1, 1) Then myX(i, 1) = tmp + myW(i, 1) tmp = 0 Else tmp = tmp + myW(i, 1) End If Next Range("BJ2").Resize(j, 1).Value = myX End Sub
お礼
ご回答ありがとうございます。 早速試してみます。
- FEX2053
- ベストアンサー率37% (7991/21371)
SUMIF関数一発の話のような気がしますけど。 http://kokoro.kir.jp/excel/sumif.html 参照するシリアル番号が多いなら、ピボットテーブルを使うと これまた一発じゃないかと。 http://www.eurus.dti.ne.jp/yoneyama/Excel2007/excel2007-piv.html
補足
この方法が一番速いですね。 列に散らばって存在する合計を 別紙に転記するのが時間が掛かって 残念なのが・・・