[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定の複数列で値が変更された時の処理について』(VBA初心者)
チェンジイベントで指定の複数列(D,J,P,V,AB列の計5列)のどこかのセルに空白を入力したときに、隣接するセルの値・色をクリアするように、以下のようなコードを記載いたしましたが、指定の列以外を変更した際にも動作してしまいます。どのように修正したら良いか、どなたかご教示いただけませんでしょうか。
Private Sub Workbook_SheetChange(ByVal Target As Range)
Application.EnableEvents = False
For Each rng In Target
With rng
If .Value = "" Then
If Target.Colum = 4 And Target.Colum = 10 And Target.Colum = 16 And Target.Colum = 22 And Target.Colum = 28 Then
.Offset(0, 1).Value = "" .Offset(0, 3).Value = "" .Offset(0, 4).Value = ""
.Offset(0, 0).Interior.ColorIndex = 0 .Offset(0, 1).Interior.ColorIndex = 0 .Offset(0, 3).Interior.ColorIndex = 0 End If End If
Next rng
Application.EnableEvents = True
End Sub
< 使用 Excel:unknown、使用 OS:unknown >
提示のコードではそもそもコンパイルエラーで動作しませんが。
Columなどというプロパティは存在しないので。
Column に修正したとしても、何も起こりません。
Ifの条件式 Target.Column = 4 And Target.Column = 10 ・・・がTrueになることは絶対ないので。
ここのAndをOrにすれば動作するかな。
(hatena) 2022/09/29(木) 13:37
お二人ともありがとうございます。
ご指摘のとおり、修正いたしましたら無事実行できました。
色々と躓いていたところ、何を勘違いしたのか本当に初歩的な間違いで
大変お恥ずかしい限りです。
まだまだ勉強が足りないことが分かりましたので、今後も経験を積んでいきたいと思います。
このたびは、迅速にご回答いただき、本当にありがとうございました。
また機会がありましたらよろしくお願いします。
(VBA初心者) 2022/09/29(木) 13:48
こんなのでも。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim Rng As Range
If Intersect(Target, Sh.Range("D:D,J:J,P:P,V:V,AB:AB")) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Rng In Intersect(Target, Sh.Range("D:D,J:J,P:P,V:V,AB:AB")) With Rng If .Value = "" Then .Offset(0, 1).Value = "" .Offset(0, 3).Value = "" .Offset(0, 4).Value = "" .Offset(0, 0).Interior.ColorIndex = 0 .Offset(0, 1).Interior.ColorIndex = 0 .Offset(0, 3).Interior.ColorIndex = 0 End If End With Next Rng Application.EnableEvents = True End Sub
(ねむねむ) 2022/09/29(木) 13:49
ねむねむさんとほぼ同じですが。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim rng As Range, c As Range Set rng = Intersect(Target, Range("D:D,J:J,P:P,V:V,AB:AB")) If rng Is Nothing Then Exit Sub
Application.EnableEvents = False For Each c In rng If c.Value = "" Then c.Offset(0, 1).Value = "" c.Offset(0, 3).Value = "" c.Offset(0, 4).Value = "" c.Offset(0, 0).Interior.ColorIndex = 0 c.Offset(0, 1).Interior.ColorIndex = 0 c.Offset(0, 3).Interior.ColorIndex = 0 End If Next rng Application.EnableEvents = True End Sub
(hatena) 2022/09/29(木) 13:56
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.