Excel VBA Макросы: Запуск макроса при изменении любой ячейки заданного столбца.

Автор Бейсболистка, 03 апреля 2019, 09:48

Бейсболистка

Нашел подходящий макрос. При вводе значения в ячейку "R10", формула в ячейке "Q10" становится значением данной формулы, а при удалении значения из "R10" формула в ячейке "Q10" возвращается.
Но код прописан только на одну ячейку - "R10". Как прописать код для целого столбца R?

Макрос
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Variant
  If Target.Address = "$R$10" Then
    If ActiveSheet.Range("$R$10") <> "" Then
      A = ActiveSheet.Range("$Q$10")
      ActiveSheet.Range("$Q$10") = A
      Else
      ActiveSheet.Range("$Q$10").FormulaR1C1 = "=IF(RC[-8]="""",IF((RC[-11]-RC[-12])<182,DATE(YEAR(RC[-12]),MONTH(RC[-12])+3,DAY(RC[-12])),DATE(YEAR(RC[-12]),MONTH(RC[-12])+6,DAY(RC[-12]))),IF((RC[-11]-RC[-12])>182,DATE(YEAR(RC[-11]),MONTH(RC[-11])-2,DAY(RC[-11])-10),DATE(YEAR(RC[-11]),MONTH(RC[-11])-5,DAY(RC[-11])-10)))"
      End If
    End If
End Sub
[свернуть]

Администратор

Макрос
Private Sub Worksheet_Change(ByVal Target As Range)

    ' Если изменения произошли в нескольких ячейках, то ничего не делаем,
        ' т.к. тяжело предсказать, что нужно сделать, и нужно делать более сложный код.
    If Target.Cells.CountLarge <> 1 Then Exit Sub
    ' Если изменение не произошло в столбце R.
    If Target.Column <> 18 Then Exit Sub
   
    ' Отключение событий, чтобы эта процедура не запускала сама себя.
    Application.EnableEvents = False
   
    ' Если в столбце R ячейка не пустая, то замена формулы в столбце Q на значение.
    If Target.Value <> "" Then
        With Target.EntireRow.Columns("Q")
            .Value = .Value
        End With
    ' Если в столбце R ячейка пустая, вставка формулы в столбец Q.
    Else
        Target.EntireRow.Columns("Q").FormulaR1C1 = "=IF(RC[-8]="""",IF((RC[-11]-RC[-12])<182,DATE(YEAR(RC[-12]),MONTH(RC[-12])+3,DAY(RC[-12])),DATE(YEAR(RC[-12]),MONTH(RC[-12])+6,DAY(RC[-12]))),IF((RC[-11]-RC[-12])>182,DATE(YEAR(RC[-11]),MONTH(RC[-11])-2,DAY(RC[-11])-10),DATE(YEAR(RC[-11]),MONTH(RC[-11])-5,DAY(RC[-11])-10)))"
    End If
   
    ' Включение событий.
    Application.EnableEvents = True

End Sub
[свернуть]

Бейсболистка