1

特定のセル値がいつ変更されたかを検出しようとするこの関数があります。問題は、ユーザーがスプレッドシート全体を選択して削除を押した場合、範囲が 1 つのセルのみであるというチェックでオーバーフローが発生することです。

Public Sub Worksheet_Change(ByVal Target As Range)

    'Overflow can occur here if range = whole spreadsheet
    If Not IsError(Int(Target.Cells.Count)) Then 
        If Target.Cells.Count = 1 Then
            If Target.Cells.Row = 4 And Target.Cells.Column = 1 Then
                Sheets("X").Cells(5, 1).Calculate
            End If
        End If
    End If
End Sub

単一の特定のセル値が変更されたときにのみ、このコードを実行できるようにするよりエレガントな方法はありますか? (オーバーフローなし、ワークシート全体をクリアするときの問題など)?

4

2 に答える 2

4

これらのバージョンでは行と列の数が劇的に増加したため、Excel 2007 以降を使用していると想定しています。行数と列数の両方が 1 であることを確認した方が運が良いかもしれません。これらの最大数は 2 つの積 (セル数) よりもはるかに小さいからです。

If Target.Rows.Count = 1 And Target.Columns.Count = 1 Then
于 2012-07-27T15:24:34.893 に答える