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

解決済みの質問

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

 仮に下のような表があります
4月
  A  B C D
1 
2 あ  10←この欄に毎月違った数字を入力します
3 あ計 30  
4 い   1
5 い計  5


月が変わると仮に
 5月
  A  B C D
1 
2 あ  20←この欄の先月10の上に上書きの仮に20を入力します
3 あ計 50←この計が自動的に先月30に+20が足され50  
4 い   1
5 い計  5

上のように、先月30が自動的に50に合計計算できるでしょうか

最終的には毎月の総合計としてA列の項目毎の計を最下欄に上段計(毎月の計)と下段計(累計)が必要になります(これは今日のOKWEBで回答をもらえ解決出来ました)

投稿日時 - 2002-05-11 20:26:29

QNo.268507

困ってます

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

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

投稿日時 - 2002-05-11 21:58:06

お礼

いつも大変お世話になっています

すごいことができるもんですね
ほんとにいつもいつも尊敬してしまいます

大変助かりました、ありがとうございました

投稿日時 - 2002-05-12 15:51:39

ANo.1

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

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

回答(2)

ANo.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
結論として上記では不完全です。

投稿日時 - 2002-05-11 23:27:19

お礼

いつもお世話になっています
ご無理をいいました

nishi6さんの回答で出来ました
ありがとうございました

投稿日時 - 2002-05-12 15:54:40

あなたにオススメの質問