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

解決済みの質問

EXCEL VBAについて教えてください

はじめまして。
過去ログに私のやりたいような内容を探していたらこのような下記のエクセル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を変えることによって他のセルにも設定できる。
と、いう内容なのですが、これをたとえば同一シートのA1~E10のセルとA12~E22にも同じよう別々に処理できるように設定したいのですが、どのようにすればいいのでしょうか?ちなみにA11~E11とA23~E23は合計を表示するセルにしたいです。
Excelのバージョンは2003です。
よろしくお願い致します

投稿日時 - 2008-10-31 23:25:47

QNo.4444776

困ってます

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

>ちなみにA11~E11とA23~E23は合計を表示するセルにしたいです。
事前にSUM関数で数式を入れて下さい。

>同一シートのA1~E10のセルとA12~E22にも同じよう別々に処理できるように設定したい

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rr As Range, rs As Range, x, y
Set rr = Intersect(Target, Range("A1:E10"))
Set rs = Intersect(Target, Range("A12:E22"))

If rr Is Nothing And rs Is Nothing 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
End Sub

こうゆう事でしょうか?

投稿日時 - 2008-11-01 10:05:37

お礼

ありがとうございます。すごいです。仕事で使っているシートがなんとかならないかと、ずっと悩んでいたことが、やっと解決することができました。私なんかのわかりにくい質問に親切に教えていただき感謝しています。

投稿日時 - 2008-11-02 22:20:05

ANo.2

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

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

回答(3)

ANo.3

質問の意味がわからない。
質問のコード例は入力セルがA1セル1つ。
履歴と入力時間は、C列とD列の下方行に無限(オーバーですが)
ーー
対する本件はA1セルに当たるものが複数ですね。
A1:E1?
C、D列に当たるそれぞれは、どの列・行の範囲に設定するのか?
ーー
A1に入力するとA11にその都度,加算するのか?。
履歴・時間はどのセルにどうする?
>A1~E10のセルとA12~E22にも同じよう別々に処理できるように設定したいのですが
意味不明。
===
コード例などまず出すより、自分のしたいことを、自分の言葉で説明すること。
実例ぐらい作って、挙げて質問したら。
コードの要求は、丸投げに近いが、コード例がなくても回答者が考えてくれるでしょう。
過去質問のコード例を掲出するなら最後に参考程度でよいのでは。
素人は似ていると思っても、根本的にコードを変えないとならない場合もある。

投稿日時 - 2008-11-01 23:50:32

お礼

そうですね。自分ではどう説明していいか、わからずに中途半端に投稿するのはないですよね。反省しています。すみませんでした。

投稿日時 - 2008-11-02 17:31:11

ANo.1

質問に書かれたコードは、
A1に入力された値が、加算されてA1に表示され、その履歴がC列とD列に表示されるものです。
あなたのセルの指定では、どこをどうしたいのかこのコードに見合ったものになっていないのではないですか。
加算されて表示されるセルの範囲と、それぞれのセルに対応した履歴を表示させるセルの範囲を指定してくれなければ、
答えようがないですよ。

投稿日時 - 2008-11-01 00:41:42

補足

すみません。
「C列に入力履歴、D列に入力時間を記録。
If Target.Address <> "$A$1" Then Exit Sub の$A$1を変えることによって他のセルにも設定できる。」というところは不要でした。入力履歴や入力時間は表示させたくないのですが、そのまま引用してしまいました。

投稿日時 - 2008-11-02 17:24:32

あなたにオススメの質問