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

解決済みの質問

このEXCELVBAを複数のセルにも別々に同じ処理をしたい

はじめまして。
過去ログに私のやりたいような内容を探していたらこのような下記のエクセルVBAがあったので、
教えて頂きたいです。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If Target.Value = "" Then Exit Sub
x = Target.Value
With Application
.ScreenUpdating = False
.EnableEvents = False
.Undo
y = Target.Value
Target.Value = x + y
.EnableEvents = True
.ScreenUpdating = True
End With
With Cells(ActiveSheet.Rows.Count, "C").End(xlUp)
.Offset(1, 0).Value = x
.Offset(1, 1).Value = Time()
End With
End Sub

A1に入力するたびに同一セルに加算。
A1をクリアできる。
C列に入力履歴、D列に入力時間を記録。
If Target.Address <> "$A$1" Then Exit Sub の$A$1を変えることによって他のセルにも設定できる。

と、いう内容なのですが、これを同一シートの複数のセルにも同じよう別々に処理できるように設定したいのですが、
どのようにすればいいのでしょうか?
VBAは最近始めたばかりなのでわからない事だらけです。
Excelのバージョンは2003です。
よろしくお願い致します。

投稿日時 - 2007-06-14 11:37:07

QNo.3083603

すぐに回答ほしいです

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

こんにちは。

A列の1行~85行まで利用出来る用に変更してみました。お試しください。
列を変更したい場合は(例えばB列)、Target.Column<>2 にすれば良いです。

Private Sub Worksheet_Change(ByVal Target As range)
  If Target.Column > 1 Or Target.Row > 85 Then Exit Sub '←A列以外又はA列85行以上の時は無視
  If Target.Value = "" Then Exit Sub
  x = Target.Value
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Undo
    y = Target.Value
    Target.Value = x + y
    .EnableEvents = True
    .ScreenUpdating = True
  End With
  With Cells(ActiveSheet.Rows.Count, Target.Row * 3).End(xlUp) '←横にカラム3~255まで表示出来る
    .Offset(1, 0).Value = x
    .Offset(1, 1).Value = Time()
  End With
End Sub

投稿日時 - 2007-06-14 15:57:31

お礼

ご回答ありがとうございます。
1.2行変えてしまうだけで、ここまで出来るとは・・
VBAは奥が深いものですね。
ColumnをRowに変えると行になるわけですね。
参考にさせて頂きます、ありがとうございました。

投稿日時 - 2007-06-14 19:47:20

ANo.1

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

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

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-