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

エクセルで、1つのセルで上書き足し算して
セルの範囲を指定できますか?
パソコン初心者です。
お時間があったらお答えをおねがいします!

自分で色々検索して参考になるものがあったのですが
他のセル場所を指定しても反映されずどのように作れば良いか分からなくなってしまいました。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim myValue As Double
  Dim preVAlue As Double
  'セルは、A1
  If Target.Address <> "$A$1" Then Exit Sub
  With Application
   .EnableEvents = False
   .ScreenUpdating = False
   If VarType(Target.Value) = vbDouble Then
     myValue = Target.Value
     .Undo
     preVAlue = Target.Value
     If VarType(preVAlue) = vbDouble Then
      Target.Value = myValue + preVAlue
      Else
      Target.Value = myValue
     End If
   End If
   .ScreenUpdating = True
   .EnableEvents = True
  End With
End Sub

を使ってA1だけでなくA1からC3まで同じ動作がセルごとにできるようにしたいのですが分かる方がいらっしゃったら教えて頂きたいです。
よろしくお願いします。

作成はシートタブのコードの表示でつくていますが、
他に同じ動作で簡単にできるものがあれば教えて頂きたいです、、、

A 回答 (3件)

fuj*** さん。

こんなのは、どうでしょう!!

'【標準モジュール】
Public Const strRng As String = "A1:C3"
Public myArray As Variant

'【シートモジュール】
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range
Dim r As Range
Set myRng = Intersect(Target, Range(strRng))
If Not myRng Is Nothing Then
Application.EnableEvents = False
For Each r In myRng
r = WorksheetFunction.Sum(r, myArray(r.Row, r.Column))
Next
Application.EnableEvents = True
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range(strRng)) Is Nothing Then
myArray = Range(strRng)
End If
End Sub
    • good
    • 1

こんにちは



ご質問には直接関係はないので、回答ではありませんけれど・・

一つのセルを上書きしてしまう仕様なので、セル範囲(=複数セル)にコピペで値を入力した際にも問題ないように配慮しておいた方がよさそうな気がします。

まぁ、そのようなコピペなど絶対に行わないというのであれば、無視してくだされば良いですが。
    • good
    • 2
この回答へのお礼

ありがとう

回答ありがとうございます‼︎
設定を伝えて他の人が入力しても間違えないように気をつけて見たいと思います。

お礼日時:2023/07/20 20:00

Public myValue As Double



Private Sub Worksheet_Change(ByVal Target As Range)
Dim preVAlue As Double
'セルは、A1
If Intersect(Target, Range("$A$1:$C$3")) Is Nothing Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
If VarType(Target.Value) = vbDouble Then
myValue = Target.Value
.Undo
preVAlue = Target.Value
If VarType(preVAlue) = vbDouble Then
Target.Value = myValue + preVAlue
Else
Target.Value = myValue
End If
End If
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

かな?
    • good
    • 0
この回答へのお礼

やってみます

回答ありがとうございます‼︎
私も初心者なのでいろいろと試行錯誤して
参考にさせていただきます♪

お礼日時:2023/07/20 20:04

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