プロが教えるわが家の防犯対策術!

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

VBA sum ワークシートChange

E列に並んでいる足し算をしたいのですが、

E列に数字をいれたら

E列の3つ下の行に合計を

表示させたい。

また、180の金額のところを
入力したらNoのところも
4と表示

連番を表示させたいのです。

可能でしょうか


B列    D列
No    金額
1     100
2     120
3     160
4     180


  合計   560

「VBA sum ワークシートChange」の質問画像

質問者からの補足コメント

  • うーん・・・

    思いどりでした
    ありがとうございました。

    ひとつお願いがあります。

    一度金額を入力したあとに
    その金額を削除したら
    連番を消えるようにしたのいですが、

    おしえてくれませんでしょうか

    いろいろ条件やってみましたが、
    うまく動作
    しませんでした。

    No.6の回答に寄せられた補足コメントです。 補足日時:2022/01/31 20:16
  • こういうケースの場合削除対象はどこになるのか?(一番最後です。)
    途中はないです。絶対に

    合わせてナンバーリングは再度振り直すのか? はいふりなおします。
    一番最後を入力したあと、そのセルの値を削除した場合は
    ナンバーリングも消えるようにしたいのです。

    よろしくお願いいたします。

    No.10の回答に寄せられた補足コメントです。 補足日時:2022/01/31 21:55
  • うれしい

    あります あります
    気が付きませんでした

    No.11の回答に寄せられた補足コメントです。 補足日時:2022/01/31 22:05
教えて!goo グレード

A 回答 (8件)

こんばんは


Offset攻めで書いてみましたが、条件はあっていますでしょうか
もっとわかり易い方法があるかもです
横から失礼なので参考程度に 
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, n As Integer
Dim tlR As Range, nr As Range
  With Target
   If .Count > 1 Then Exit Sub
   If .Column <> 4 Then Exit Sub
   If .Row < 3 Then Exit Sub
   Set r = .EntireColumn.Find("金額") 'シンボル
   If r Is Nothing Then Exit Sub
   Set tlR = Cells(Rows.Count, .Column).End(xlUp)
   Application.EnableEvents = False
   If .Offset(1) <> "" And .Value <> "" Then '途中変更
    tlR = Application.Sum(r.Resize(tlR.Row - 2))
    GoTo myEnd
   End If

   If IsNumeric(.Offset(-1, -2)) Then '通常入力№
    .Offset(, -2) = .Offset(-1, -2) + 1
   Else
    .Offset(, -2) = 1
   End If
   If .Value <> "" Then '通常入力
    .Offset(1, -2).Resize(tlR.Row, 3).ClearContents
    .Offset(3, -1).Value = "合計"
    .Offset(3).Value = Application.Sum(r.Resize(.Row))
   Else '消した時
    n = 1
    Range(.Offset(, -2), .Offset(, 0)).Delete Shift:=xlUp
    tlR.Offset(, -2).Resize(1, 3).ClearContents
    tlR.Offset(, -1) = "合計"
    tlR.Value = Application.Sum(r.Resize(tlR.Row - 2))
    For Each nr In Range(r.Offset(1), tlR.Offset(-3))
      nr.Offset(, -2).Value = n
      n = n + 1
    Next
   End If
  End With
myEnd:
  Application.EnableEvents = True
End Sub
    • good
    • 2
この回答へのお礼

いつもお世話になっております
理想通りの結果となりました。
最初はわたしも Application.EnableEvents = False
   If .Offset(1) <> "" And .Value <> "" Then '途中変更
こんな感じで条件つけてやりましたが、
エラーになってしまい
いつものパニックでめちゃくちゃ になってしまいました。
ありがとうございました。

お礼日時:2022/02/01 07:41

追加です。



既に入力済みの一番最後ではないセルについて、削除はなくとも編集(修正)の可能性もありませんか?
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/02/01 07:42

>一度金額を入力したあとに


>その金額を削除したら

横から失礼します。
こういうケースの場合削除対象はどこになるのか?(一番最後?途中?)
合わせてナンバーリングは再度振り直すのか?
と言う情報は必要でしょう。

なお途中が削除の場合の合計の表示位置はどこになるのか?
ですよね。
個人的にはTargetからOffsetはしないかも?
でもセルのデータ範囲の途中に空白セルが発生するのなら最終セルを下からUPで調べるかな?
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/02/01 07:42

No.8です。



あと気になるとしたらデータは上から空白セルなしでデータの塊となるのか(追加・編集含め)ですかね。

でも利用規約違反行なったので凍結されてるのかな?
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/02/01 07:42

気になる点です



・一度入力した途中のデータは、あとから編集される事はないのか?(削除含め)
・あり得ないとは思いますが、最終行手前まで入力する事はないのでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/02/01 07:42

No.1の者です。



Noと、金額は質問者さんの方で手入力されるなり、マクロで入力なりで
対応してみて下さい。 一例ですが、下記の様な感じでしょうかね?
対象のシートに、下記コードを入力して、試してみて下さい。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Column <> 4 Then Exit Sub
If .Row < 3 Then Exit Sub
Application.EnableEvents = False
.Offset(, -2) = .Row - 2
.Offset(2, -1).Resize(1, 2).ClearContents
.Offset(3, -1).Value = "合計"
.Offset(3).FormulaR1C1 = "=SUM(R3C4:R" & .Row & "C4)"
Application.EnableEvents = True
End With
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。
参考にいたします。

お礼日時:2022/02/01 07:42

No.1の者です。



東西線は、質問者さん??
あと一番最初は、Noと金額の文字だけで、他は空白になるのでしょうか?
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2022/02/01 07:41

こんばんは。



>E列に並んでいる足し算をしたいのですが、
E列に数字をいれたら
E列の3つ下の行に合計を

先ず、D列の間違えだと思いますが。
180を入れて、3つ下に合計は、分かるのですが、その後、180の下に
他の数字を入れる事があって、それがずっと続くのでしょうか?

合計は、Sum関数の指定になるでしょうか?

質問者さんが、どんな感じに作られているか?コードをアップして貰うと
分からないところを、アドバイスできるのでは?と思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/02/01 07:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング