• ベストアンサー

エクセルの条件付き合計の出し方

たとえば下のように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 *

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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

yuunoji
質問者

お礼

ありがとうございます。最初のIF文3式でくむ方法で答えが出ました。中年初心者だとユーザー定義関数とか良くわからないのです、これから勉強してnishi6さんのように人に教えられるよにがんばってみます。

その他の回答 (2)

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

これくらいの問題になると、関数式では難しいと思い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列の通り。 テストデータを沢山のケースを作りにくいので、上記しかテスト出来てませんが、本番データの一部で十分テストをしてください。

yuunoji
質問者

お礼

すばらしい回答ありがとうございました。 ただ、私の勉強不足でVBAが解りません。もう少し勉強してから確認してみようとおもいます。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

単純に、C3に 「=IF(B3<>0,A1+A2,"")」 これを、C4以降にコピーすればOK?

yuunoji
質問者

補足

すみませんでした、私の質問記入方法が良くなかったのかもしれません。B列に数字が入っているときはそのA列の数字は使わないでひとつ上の数字を加えるということで、つねにつながったセルを加算するわけではないのです。

関連するQ&A