No.4です。
Aさん、Bさん、・・毎に件数カウントを分けて行うには“cells(2”の”2”の所を件数入力をした行番号“rw”に置き換えれば可です。そして入力した行番号を取得するため二行目に“ rw = Target.Row”を入れます。入力するセルをお好みの列に変えるには3行目の“If Target.Column = 1”(←件数を1列目にインプットした時のみ処理を行うよう制限を加る。)の値を変更して更にrw,の次の数字も変更して累積数の書込列番号を指定し直します。これにより、A列を担当者名欄にすること等も出来ます。
「日付が必要ではない場合は~~教えてください。」ですがD列の日付のことでしょうか。それでしたら必須です。目ざわりでしたら列幅=ゼロに設定を・・。
Private Sub Worksheet_Change(ByVal Target As Range)
rw = Target.Row
If Target.Column = 1 And IsNumeric(Target.Value) = True Then
pdate = Cells(rw, 4)
If Month(Date) = Month(pdate) Then
Cells(rw, 2).Value = Cells(rw, 2) + Target.Value
Else
Cells(rw, 2).Value = Target.Value
End If
If Year(Date) = Year(pdate) Then
Cells(rw, 3).Value = Cells(rw, 3) + Target.Value
Else
Cells(rw, 2).Value = Target.Value
Cells(rw, 3).Value = Target.Value
End If
Cells(rw, 4).Value = Date
End If
End Sub
A2セルに本日の件数をインプットすると自動的にB2、C2セルに月累計、期累計が表示されるという風に解釈しこれを自動的に行うコード(末尾記載)を作成しました。
シート名「Sheet1」の所を右クリックし、コードの表示(V)を選んだときに表示される白い画面にこれを貼り付れば完了です。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 2 And Target.Column = 1 And IsNumeric(Target.Value) = True Then
pdate = Cells(2, 4)
If Month(Date) = Month(pdate) Then
Cells(2, 2).Value = Cells(2, 2) + Target.Value
Else
Cells(2, 2).Value = Target.Value
End If
If Year(Date) = Year(pdate) Then
Cells(2, 3).Value = Cells(2, 3) + Target.Value
Else
Cells(2, 2).Value = Target.Value
Cells(2, 3).Value = Target.Value
End If
Cells(2, 4).Value = Date
rw = Sheets(2).Range("a65536").End(xlUp).Row
Sheets(2).Cells(rw + 1, 1).Value = Date: Sheets(2).Cells(rw + 1, 2).Value = Target.Value
End If
End Sub
お礼
詳しくありがとうございます。 大いに参考にして、がんばって作ってみます。 また質問すると思うのでその際にはよろしくお願いします。
補足
お世話になってます。 頑張ってみました! (1)こんな感じで一応動きます が、これでいいのでしょうか? (2) pdate = Cells(rw, clm \ 4 + 26) で、「¥」が入ると何が違うのですか? また、4+26とする意味は?clm + 30 でも同じようになると思うのですが? 年月日の列が邪魔にならないように遠くの列にしたのは意味わかります。(あれ?そうですよね) (3)どーしてもわからないのですが、 なぜ件数をインプットした本日の年月日を書き込んでおく事が月計・期計を求める上で必須になるのでしょうか? あほですません。 なぜか教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) rw = Target.Row clm = Target.Column If Target.Column = 1 And Target.Row = 2 And IsNumeric(Target.Value) = True Or _ Target.Column = 1 And Target.Row = 3 And IsNumeric(Target.Value) = True Or _ Target.Column = 1 And Target.Row = 4 And IsNumeric(Target.Value) = True Or _ Target.Column = 5 And Target.Row = 2 And IsNumeric(Target.Value) = True Or _ Target.Column = 5 And Target.Row = 3 And IsNumeric(Target.Value) = True Then pdate = Cells(rw, clm \ 4 + 26) If Month(Date) = Month(pdate) Then Cells(rw, clm + 1).Value = Cells(rw, clm + 1) + Target.Value Else Cells(rw, clm + 1).Value = Target.Value End If If Year(Date) = Year(pdate) Then Cells(rw, clm + 2).Value = Cells(rw, clm + 2) + Target.Value Else Cells(rw, clm + 1).Value = Target.Value Cells(rw, clm + 2).Value = Target.Value End If Cells(rw, clm \ 4 + 26).Value = Date End If End Sub