- ベストアンサー
Excel VBA 行の上書き足し算
L、M列の各セルを上書き足し算できるようにしたいです。 L2に2と入力して、次にL2に3と入力したら5になるというのを各セルでできるようにしたいです。 いろいろ試してみたのですがうまくいかず… わかる方、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> L.M列に入力していた数字を消そうとしたら消えませんでした。 If Target.Column <> Columns("L").Column And _ Target.Column <> Columns("M").Column Then Exit Sub End If を If (Target.Column <> Columns("L").Column And _ Target.Column <> Columns("M").Column) Or _ Target.Value = "" Then Exit Sub End If に変更してください。
その他の回答 (2)
- kkkkkm
- ベストアンサー率66% (1735/2605)
適用したいシートのプロシージャに以下のコードで試してみてください。シートタブ右クリックで出たメニューでコードの表示です。 Private Sub Worksheet_Change(ByVal Target As Range) Dim NewVal As Variant If Target.Column <> Columns("L").Column And _ Target.Column <> Columns("M").Column Then Exit Sub End If Application.EnableEvents = False NewVal = Target.Value Application.Undo If IsNumeric(Target.Value) = True And IsNumeric(NewVal) = True Then Target.Value = NewVal + Target.Value Else Target.Value = NewVal End If Application.EnableEvents = True End Sub
補足
L.M列に入力していた数字を消そうとしたら消えませんでした。 入力した数字をbackspaceやdeleteで消せるようにしたいのですが、そんな場合はどうすれば良いのでしょか?
- SI299792
- ベストアンサー率47% (780/1632)
基本的に不可能です。新しいデータを入れたら前のデータは消えます。 マクロを使い、どこか(別セル・別シート・メモリー)に前の数字を記憶しておけば不可能で はありません メモリーに記憶するサンプルです。メモリーなので、保存終了をすれば消えます。 1048576 行迄記憶するとメモリーの無駄なので 100行までにしました。 Option Explicit ' Private Sub Worksheet_Change(ByVal Target As Range) Static SaveData(1 To 100, 12 To 13) As Double ' If Target.Count > 1 And Intersect(Target, [L1:M100]) Is Nothing Then End ElseIf Not IsNumeric(Target) Then End End If ' Application.EnableEvents = False Target = Target + SaveData(Target.Row, Target.Column) SaveData(Target.Row, Target.Column) = Target Application.EnableEvents = True End Sub シートシートモジュールに入れて下さい。 Sheet1のシート名の所を右クリック、コードの表示を選び、そこに入れて下さい。
補足
行を増やしたいのですが、そんな場合はどうしたらいいのでしょうか?
お礼
無事できました。 ありがとうございました。