• ベストアンサー

エクセルで足し算の仕方出来るでしょうか

 仮に下のような表があります 4月   A  B C D 1  2 あ  10←この欄に毎月違った数字を入力します 3 あ計 30   4 い   1 5 い計  5 6 月が変わると仮に  5月   A  B C D 1  2 あ  20←この欄の先月10の上に上書きの仮に20を入力します 3 あ計 50←この計が自動的に先月30に+20が足され50   4 い   1 5 い計  5 上のように、先月30が自動的に50に合計計算できるでしょうか 最終的には毎月の総合計としてA列の項目毎の計を最下欄に上段計(毎月の計)と下段計(累計)が必要になります(これは今日のOKWEBで回答をもらえ解決出来ました)

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

Sheet1で行う例です。関数だけでは無理ですね。マクロを利用してみました。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示します。 プロジェクトエクスプローラのSheet1をダブルクリック。出てきたコードウインドウに下記マクロを貼り付けます。 このマクロは  inpAreaに設定したセル範囲の偶数行に入力したら機能します。  今は "B2:B11" なので、B2、B4、B6、B8、B10に入力すればその下のセルに加算します。  C、D列も可能にするなら、"B2:D11" のようにします。  ※個人的にはこのような処理は好きではありませんが・・・    間違えて計のセルに入力したらどうします?とりあえずは Ctrl+Z で元に戻しましょう。    間違えた入力については、計を修正するか、逆符号で入力する必要があります。 ここから ↓ Const inpArea = "B2:B11"  '自分で入力範囲(と合計範囲)を設定します Private Sub Worksheet_Change(ByVal Target As Range)   Dim rg As Range '入力と合計を計算するセル範囲   Set rg = Range(inpArea)   If Target.Count = 1 Then     If Not (Intersect(Target, rg) Is Nothing) Then       '指定した範囲に入力したら       If Target.Row Mod 2 = 0 Then         '偶数行に入力したら、下のセルに加算する         Target.Offset(1, 0) = Target.Offset(1, 0) + Target       End If     End If   End If End Sub

71063
質問者

お礼

いつも大変お世話になっています すごいことができるもんですね ほんとにいつもいつも尊敬してしまいます 大変助かりました、ありがとうございました

その他の回答 (1)

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

エクセル(表計算ソフト)では (1)あるセル(A1)に入力したデータを、別のセル(B1)に飛ばして データをセットことは出来ない。(B1側で=A1で値を取ることは出来るが。) (2)まして入力順序に従って、続いた別のセルに記録できない。 従って=SUM(・・・)が使えない。 (3)B1セルで「=B1+A1」という式がセット出来ない。循環参照エラーになる。 (4)注目しているセル(=を入れるセル)には、他のセルの値をを参照できるが、注目しているセルへ式を入れることによって、他のセルへデータをセットしたり、他のセルへ式をセットすることは出来ない。 従って質問の件は関数式では不可能と思う。 ---- しかし上記(1)-(4)が出来る、プログラム言語なら出来る。ただしVBAでは適当なイベントがなく、下記のSelectionChangeではマウスのクリックだけでも足されてしまう。データ入力+エンタ押し下げしたときだけで反応とか、セルの値が変わったら反応するするイベントがあればと思う。 MoveAfterReturnDirectionが下方との前提で、「A1に値を入れる都度にA2に累積する」として Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$2" Then ' MsgBox ActiveCell.Address Worksheets("sheet1").Range("a2") = Worksheets("sheet1").Range("a2") + Worksheets("sheet1").Range("a1") End If End Sub 結論として上記では不完全です。

71063
質問者

お礼

いつもお世話になっています ご無理をいいました nishi6さんの回答で出来ました ありがとうございました

関連するQ&A