1

一度に複数のセルを変更できないようにするコードがあります。ただし、一度に複数のセルを削除することはできます。以下は私が使用しているコードで、うまく機能します。

Dim vClear As Variant
Dim vData As Variant

'This prevents more than one cell from being changed at once.
'If more than one cell is changed then validation checks will not work.
If Target.Cells.Count > 1 Then
    vData = Target.Formula
    For Each vClear In vData
        If vClear <> "" Then 'If data is only deleted then more than one cell can be changed.
            MsgBox "Change only one cell at a time", , "Too Many Changes!"
                Application.Undo
                Exit For
        End If
    Next
End If

私が追加しようとしているのは、データが削除されたときに、どの列のデータが削除されているかを確認したいということです。いずれかの列が要件を満たしている場合は、別の列の同等の行のデータも削除する必要があります。

これが私がやろうとしていることの例です。チェックが必要な列が 2 つあります。それらは G と H です。これらの 2 つの列のいずれかからデータが削除された場合は、列 I も削除する必要があります。D5:G10 の範囲を選択し、その内容を削除するとします。列 G は要件の 1 つであるため、I5:I10 も削除する必要があります。D5:F10 を削除しても、列 G も H も選択されていないため、列 I の何も削除されません。

以下は、私がやろうとしていることのサンプルコードです。以下のコードが機能しないことはわかっています。これは、私がやろうとしていることの簡単な要約にすぎません。バリアントを取得して列もチェックする方法がわかりません。誰かがこれを行う方法を知っているかどうか教えてください。

Dim vClear As Variant
Dim vData As Variant

'This prevents more than one cell from being changed at once.
'If more than one cell is changed then validation checks will not work.
If Target.Cells.Count > 1 Then
    vData = Target.Formula
    For Each vClear In vData
        If vClear <> "" Then 'If data is only deleted then more than one cell can be changed.
            MsgBox "Change only one cell at a time", , "Too Many Changes!"
                Application.Undo
                Exit For
        Else
            If vClear = "" Then
                If vClear.Column = 7 Or vClear.Column = 8 Then
                    ActiveSheet.Cells(vClear.Row, 9) = ""
                End If
            End If
        End If
    Next
End If
4

1 に答える 1