[[20220929131356]] 『指定の複数列で値が変更された時の処理について』(VBA初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定の複数列で値が変更された時の処理について』(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


With rng に対応する End With も無いね。
(ufj) 2022/09/29(木) 13:45

(hatena)さん、(ufj) さん

お二人ともありがとうございます。
ご指摘のとおり、修正いたしましたら無事実行できました。

色々と躓いていたところ、何を勘違いしたのか本当に初歩的な間違いで
大変お恥ずかしい限りです。

まだまだ勉強が足りないことが分かりましたので、今後も経験を積んでいきたいと思います。

このたびは、迅速にご回答いただき、本当にありがとうございました。
また機会がありましたらよろしくお願いします。
(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.