- ベストアンサー
エクセルの条件付き合計の出し方
たとえば下のようにABC列がありB列に数字があるときC3の*にはA1とA2の合計を、C5にはA2とA4の合計を、C6にはA2とA4の合計C9にはA7とA8の合計を出す方法すなわち、Bに数字があるとき、A列の1行上と2行上を合計する式お願いします。 A B C 1 1 2 3 3 7 2 * 4 6 5 9 3 * 6 4 7 * 7 6 8 8 9 5 6 *
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
A B C D 1 1 式1 2 3 式3 式2 3 7 2 ↓ ↓ 4 6 ↓ ↓ 5 9 3 ↓ ↓ 6 4 7 ↓ ↓ 7 6 ↓ ↓ 8 8 ↓ ↓ 9 5 6 ↓ ↓ 問題は、B列が未入力になっている指定セルの上2つのA列セルの合計を求める としました。 D列を補助に使います。C1には式は入力しません。 式1:=IF(B1="",1,"") 式2:=IF(B2="",COUNT($D$1:D1)+1,"") 式3:=IF(B2<>"",INDEX(A:A,MATCH(LARGE($D$1:D1,1),D:D),)+INDEX(A:A,MATCH(LARGE($D$1:D1,2),D:D),),"") として、式2、式3は下方向にコピーします。 また、ユーザ定義関数を作ってみると下のようになりました。 C3には、=cellsTTL(B3) のようにして使います。これを上下にコピーします。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入します。 出てきたコードウインドウに下記マクロをコピーして貼り付けます。 Function cellsTTL(Rng As Range) Dim rw As Long '// 行数 Dim TTLcot As Integer '// セルのカウンタ Dim TTL As Variant '// 2つのセルの計 '// B列が未入力の上2つのセルの合計を求める If Rng <> "" Then For rw = Rng.Row - 1 To 1 Step -1 If Cells(rw, 2) = "" Then If TTLcot = 2 Then Exit For Else TTL = TTL + Cells(rw, 1) TTLcot = TTLcot + 1 End If End If Next Else TTL = "" End If cellsTTL = TTL End Function
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
これくらいの問題になると、関数式では難しいと思いVBAで組んでみました。 Sub test02() d = Range("A1").CurrentRegion.Rows.Count For i = 1 To d If Cells(i, "B") = "" Then Else t = 0: n = 0 For j = i - 1 To 1 Step -1 If Cells(j, "B") <> "" Then Else t = t + Cells(j, "A") n = n + 1 If n = 2 Then Cells(i, "c") = t GoTo p01 End If End If Next j p01: End If Next i End Sub (テストデータ) A1:B9 (A列)(B列)(C列) 1 3 7 2 4 6 9 3 9 4 7 9 6 8 5 6 14 (結果)上記C列の通り。 テストデータを沢山のケースを作りにくいので、上記しかテスト出来てませんが、本番データの一部で十分テストをしてください。
お礼
すばらしい回答ありがとうございました。 ただ、私の勉強不足でVBAが解りません。もう少し勉強してから確認してみようとおもいます。
- edomin
- ベストアンサー率32% (327/1003)
単純に、C3に 「=IF(B3<>0,A1+A2,"")」 これを、C4以降にコピーすればOK?
補足
すみませんでした、私の質問記入方法が良くなかったのかもしれません。B列に数字が入っているときはそのA列の数字は使わないでひとつ上の数字を加えるということで、つねにつながったセルを加算するわけではないのです。
お礼
ありがとうございます。最初のIF文3式でくむ方法で答えが出ました。中年初心者だとユーザー定義関数とか良くわからないのです、これから勉強してnishi6さんのように人に教えられるよにがんばってみます。