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