当另一个细胞发生变化时,清除一个细胞的内容 - 对于多个细胞

时间:2018-02-15 17:56:12

标签: excel vba excel-vba

我已经搜索过这方面的答案,但找不到任何特定于我需要的东西。我正在创建一个包含多行需要具有相同功能的工作表。例如,在第2行 - 我需要D2:F2的内容来清除B2中的值是否改变。

我找到了一个适用于那个实例的VBA代码。但是,我还需要在第6行,第10行,第14行等中使用相同的功能 - 每第4行直到第118行共30行。

每一行都必须是独占的。如果我更改B2中的值,我不希望它清除其他行中的值 - 只有第2行。如果我更改B6中的值,我只想在第6行中更改值...并且等等。

这是我用于B2的代码,但我不确定它是否可以针对更多行进行修改,或者我是否需要完全不同的代码。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B2")) Is Nothing Then
        Range("D2:F2").ClearContents
    End If
End Sub

请指教 - 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用MOD

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 118 Then Exit Sub
    If Target.Row Mod 4 = 2 And Not Intersect(Target, Cells(Target.Row, 2)) Is Nothing Then
        Range("D" & Target.Row & ":F" & Target.Row).ClearContents
    End If
End Sub

答案 1 :(得分:1)

首先将Target.Row限制在2到118之间。

其次,使用Mod仅检查第4行。

尝试类似下面的代码:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row >= 2 And Target.Row <= 118 Then
    If (Target.Row + 2) Mod 4 = 0 Then
        If Target.Column = 2 Then
            Target.Offset(, 2).Resize(1, 3).ClearContents
        End If
    End If
End If

End Sub