• ベストアンサー

エクセル 特定のセルの合計値を出す方法

たとえば、A3~A20まで数値データ(1)が入っているとします。次の行のA21は空白、A22~A30はデータ(2)が入っています。 1日にA3~5、2日にA6…と、順々にデータを入れていくのですが、常に入力したところまでの合計がほしいです。 が、データの最後がA列のどこになるかはその時によって違うので、SUM関数で指定できません (=SUM(A3:A20)のA20がA19になるかA22になるかわからないので、データがすべて入れ終わるまで範囲指定ができないのです) また、データ(1)がすべて入れ終わってから、一行空けてデータ(2)を入れ始めます。 データ(1)と(2)の間には必ず1行空白を入れるので、A3から次の空白のセルまでの合計を出そうとしたのですが、どうやっても出来ません。 この場合、自動的にA1にデータ(1)の合計値を出すにはどうしたらいいでしょうか? また、データ(2)の合計値をA2に出すことは出来るでしょうか? ややこしい質問で申し訳ありませんが、ご教授ください。

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

  • ベストアンサー
noname#62235
noname#62235
回答No.1

範囲が動的に変化するので、VBAでユーザー定義関数を作るしかないと思います。 [ツール]→[マクロ]→[Visual Basic Editor]を開き、対象のワークシートで右クリックして[挿入]→[標準モジュール]を作ります。 そこに、関数を記述します。 こんな感じです。 Function VariableSum() As Double Dim Row As Integer Application.Volatile VariableSum = 0 Row = 3 While Cells(Row, 1) <> "" VariableSum = VariableSum + Cells(Row, 1) Row = Row + 1 Wend End Function Function VariableSum2() As Double Dim Row As Integer Application.Volatile VariableSum2 = 0 Row = 3 While Cells(Row, 1) <> "" Row = Row + 1 Wend Row = Row + 1 While Cells(Row, 1) <> "" VariableSum2 = VariableSum2 + Cells(Row, 1) Row = Row + 1 Wend End Function あとは、 A1セル =VariableSum() A2セル =VariableSum2() ただ、データの構造を単純化すれば、わざわざユーザー定義関数を作らなくてもよくなるような気もするので、再考したほうが今後のことを考えるといいように思います。

その他の回答 (3)

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.4

合計行の上に空白行を一つ設けて、空白行までSUMします。データを入力するとき空白行で行挿入すると自動的に計算式が変わります。 A3:データ1 A4:データ2 A5:データ3 A6:空白 A7:=SUM(A3:A6) A8:次のグループのデータ 2日目に5件のデータがあるとします 6行目の行No.6から10行目までドラッグして、 挿入メニューから行を選びます。 (アクティブになった行No.で右クリック→挿入→行でもよい) これでA12は=SUM(A3:A11)となり、次のグループの集計式のセルも正しい計算式になります。

rollingcat
質問者

お礼

みなさまご回答くださってありがとうございます。 ここでまとめてお礼を言わせていただきます。 いろいろ方法があるようなので、どの方法にするか検討してみたいと思います。 ポイントは回答くださった順にしたいと思います…

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.3

   A 1  6 2  18 3  1 4  2 5  3 6 7  5 8  6 9  7 ◆A1:A3から空白のセルまでの合計 A1=SUM(OFFSET(A3,,,MATCH(1,INDEX(1/(A3:A100=""),),0))) または、 A1=SUM(A3:INDEX(A3:A100,MATCH(1,INDEX(1/(A3:A100=""),),0))) ◆A2:空白のセル以下の合計 A2=SUM(OFFSET(A3,MATCH(1,INDEX(1/(A3:A100=""),),0),,100)) または、 A2=SUM(INDEX(A3:A100,MATCH(1,INDEX(1/(A3:A100=""),),0)):A100) ★いかがでしょうか?

noname#153814
noname#153814
回答No.2

OFFSET関数を使います。 現在A3~A30までデータが入っている。 途中には空白もある。 A31に合計を出す。 =SAM(A3:OFFSET((A31,-1,0)) で出ます。

関連するQ&A