вычислить ячейки в диапазоне, если пользователь изменяет любое значение ячейки в диапазоне - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть этот код, который работает и вычисляет A1 на основе того, что в A2: A5. если у меня есть «1» в A2: A5, то A1 равно 4. Теперь я изменяю A1 на «3» и хочу посмотреть, каким будет A2: A5, но он возвращается к «4». Как я могу изменить этот макрос, чтобы это произошло? Мне нужно, чтобы это работало для любой ячейки в диапазоне A1: A5.

Private Sub Worksheet_Change(ByVal Target As Range)'

Dim A(1 To 5) As Range

Set A(1) = Range("A1")
Set A(2) = Range("A2")
Set A(3) = Range("A3")
Set A(4) = Range("A4")
Set A(5) = Range("A5")

If Intersect(Range("A1:A5"), Target) Is Nothing Then Exit Sub

Application.EnableEvents = False
    A(1) = A(2) + A(3) + A(4) + A(5)
    A(2) = A(1) - A(3) - A(4) - A(5)
    A(3) = A(1) - A(2) - A(4) - A(5)
    A(4) = A(1) - A(2) - A(3) - A(5)
    A(5) = A(1) - A(2) - A(3) - A(4)
Application.EnableEvents = True
End Sub

1 Ответ

0 голосов
/ 27 февраля 2020

Примерно так:

Private Sub Worksheet_Change(ByVal Target As Range) '

    Dim A(1 To 5) As Range

    Set A(1) = Range("A1")
    Set A(2) = Range("A2")
    Set A(3) = Range("A3")
    Set A(4) = Range("A4")
    Set A(5) = Range("A5")

    If Intersect(Range("A1:A5"), Target) Is Nothing Then Exit Sub

    Application.EnableEvents = False
        If Intersect(A(1), Target) Is Nothing Then A(1) = A(2) + A(3) + A(4) + A(5)
        If Intersect(A(2), Target) Is Nothing Then A(2) = A(1) - A(3) - A(4) - A(5)
        If Intersect(A(3), Target) Is Nothing Then A(3) = A(1) - A(2) - A(4) - A(5)
        If Intersect(A(4), Target) Is Nothing Then A(4) = A(1) - A(2) - A(3) - A(5)
        If Intersect(A(5), Target) Is Nothing Then A(5) = A(1) - A(2) - A(3) - A(4)
    Application.EnableEvents = True
End Sub
...