こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

昨日の続き:行挿入時の合計範囲について

昨日の質問の件ですが、合計行が明細の最後ではなく、明細の先頭にある場合は難しいですよね。いろいろ試行錯誤してみたのですが、いい方法が見つかりません。
(知識不足もありますが)
何か方法があれば、ご教授ください。
よろしくお願いします。

投稿日時 - 2019-05-08 15:19:22

QNo.9614713

困ってます

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

↓でわかりますか?
B C
2 A合計行 4 [C2]=SUM(OFFSET(C2,1,0):OFFSET(C7,-1,0))
3 A明細 1
4 A明細 1
5 A明細 1
6 A明細 1
7 B合計行 40 [C7]=SUM(OFFSET(C7,1,0):OFFSET(C12,-1,0))
8 B明細 10
9 B明細 10
10 B明細 10
11 B明細 10
12 datend ----

投稿日時 - 2019-05-09 11:35:26

お礼

分かりました。
試してみましたが、うまくいきました。
本当にありがとうございました。

投稿日時 - 2019-05-10 14:16:16

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(10)

ANo.10

>昨日の続き?
 この事情はわかりませんが
 合計行が1行だけなら明細行の外であればどこにあってもよいです。
 私は、見出し行の次に合計行、以下を明細行としています

投稿日時 - 2019-05-09 22:55:30

お礼

ご指摘ありがとうございます。

投稿日時 - 2019-05-10 14:23:39

ANo.9

別解
B1セル(A合計)に次の数式を設定します。
=SUM(OFFSET(A1,1,1,COUNTIF(OFFSET(A1,1,0,COUNTA(A:A)),LEFT(A1,1)&"*")))
B1をB5セル(B合計)へコピーすれば自動的にA合計とB合計が算出されます。
但し、A列の?明細nは中間にブランクがあると正しい値になりません。

投稿日時 - 2019-05-09 20:34:48

お礼

いろんなやり方を教えて頂き、ありがとうございました。

投稿日時 - 2019-05-10 14:22:25

ANo.8

回答No.5への補足にある模擬データでしたらB1セルへ次の数式を入力してください。
=SUMIF(A2:A5,LEFT(A1,1)&"*",B2:B5)
B5セルの数式はA明細とB明細の行数が同じなのでB1セルをコピー&ペーストでB5セルへ複写すれば数式の行番号が自動的に参照範囲に変化します。

B1=SUMIF(A2:A5,LEFT(A1,1)&"*",B2:B5)
      ↓ コピー&ペースト
B5=SUMIF(A6:A9,LEFT(A5,1)&"*",B6:B9)

投稿日時 - 2019-05-09 16:21:41

お礼

このやり方も出来ました。
本当にありがとうございました。

投稿日時 - 2019-05-10 14:17:58

ANo.6

[No2補足]へのコメント、
内容が支離滅裂でサッパリポンです~ゥ

投稿日時 - 2019-05-09 09:40:33

ANo.5

>合計行が明細の最後ではなく、明細の先頭にある場合は難しいですよね。
明細は最後の行に順次追記するだけですか?
それとも、最後の行の下へセルの挿入して追記するのでしょうか?

>データは、A合計行+A明細+B合計行+B明細・・・の繰り返しの為
何を言っているのか読み取れません。
模擬データを提示してください。

投稿日時 - 2019-05-08 22:36:10

補足

すみません。具体的に書いた方がいいですよね。
 1 A合計  100 ← (1)1行目~4行目の間であれば、Aの明細を
 2 A明細1  20   挿入した時に1行目のA合計行の関数範囲が
 3 A明細2  30   変わる
 4 A明細3  50 ← (2)4行目・5行目の間に、A明細を挿入した
 5 B合計  170   時は、1行目のA合計行の関数範囲が変わら
 6 B明細1  50   ない。
 7 B明細2  50
 8 B明細3  70

(2)の時にも、関数の範囲が変わって1行目の合計が正常に計算されるようにしたいとということです。
よろしくお願いします。

投稿日時 - 2019-05-09 13:01:10

ANo.4

VBAを使った「カスタム関数」でよければ
次のようなコードで期待の動作を実現できます。

=spTotal(E2,E:E)
第一引数は合計するセル群の最上位セルです。
第二引数は合計を求めるセル群を含む列を指定します。

動作は
第一引数のセルから開始して
下方向に、空欄のセル、または計算式の埋まったセルの直前までの
セルたちの合計を求めます。

なお、第二引数は計算には無関係です。
合計対象範囲が変化したときに再計算させるために与えています。


Option Explicit

Function spTotal(rng As Range, DmyRange As Range) As Double
 Dim RowCnt As Long
 Dim wkTotal As Double
 
 RowCnt = 0
 wkTotal = 0
 Do
  If rng.Offset(RowCnt, 0).Value = "" Then Exit Do
  If rng.Offset(RowCnt, 0).HasFormula = True Then Exit Do
  wkTotal = wkTotal + rng.Offset(RowCnt, 0).Value
  RowCnt = RowCnt + 1
 Loop
 spTotal = wkTotal

End Function

投稿日時 - 2019-05-08 22:33:27

お礼

細かく記述して頂き、ありがとうございます。
後で、試させて頂きます。

投稿日時 - 2019-05-10 14:13:52

ANo.3

>合計行が明細の最後ではなく、明細の先頭にある場合

ということは、私の回答は試されてないのですね。
応用すれば、
=SUM(OFFSET(C1,1,0):C10)
でOKなことはすぐわかると思います。

投稿日時 - 2019-05-08 15:58:18

補足

説明不足で申し訳ありません。
データは、A合計行+A明細+B合計行+B明細・・・の繰り返しの為
一括で集計することができません。A、B・・・それぞれ集計する必要があります。
 ↓
B合計行の直前にAの明細を追加した時に
「=SUM(OFFSET(C1,1,0):C10)」の「C10」が自動的に「C11」に変わってほしいのですが。
B合計行の直前ではなく、Aの明細の途中に追加した時はC11に変わります。
何度もすみません。

投稿日時 - 2019-05-08 18:40:54

ANo.2

C1: =SUM(C2:C1000)

投稿日時 - 2019-05-08 15:53:26

補足

説明不足で申し訳ありません。
データは、A合計行+A明細+B合計行+B明細・・・の繰り返しの為
一括で集計することができません。A、B・・・それぞれ集計する必要があります。

投稿日時 - 2019-05-08 16:01:44

お礼

ご回答ありがとうございます。

投稿日時 - 2019-05-08 18:02:41

ANo.1

C1にSUM(C1:C10)をコピーして
SUM(C2:C11)と書き換えれば良いだけです。
C11)の後ろにカソールをあてれば計算範囲が現れます。
SUM()の数値は削除・書き換えができます。

投稿日時 - 2019-05-08 15:37:34

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-