Динамически определять изменения в диапазоне и добавлять или удалять формулы в ячейке в Excel - PullRequest
0 голосов
/ 11 октября 2019

У меня динамический диапазон ячеек. В зависимости от того, будет ли кто-либо добавлять или удалять данные в одной из ячеек в столбце A, диапазон будет меняться. Мне нужно обнаружить изменение в этом диапазоне. Диапазон равен sht.Range("C3:" & Cells(numberOfRows, numberOfColumns). Тогда, например, скажем, что ячейка, которая изменилась, это «F9». Мне нужно добавить формулу к «AH9». Дело в том, что формула всегда будет находиться в столбце «AH», а строка - это то, что изменится. Если вам интересно, формула, которую я добавляю, будет суммировать столбцы от «C» до «AG» в строке с измененной ячейкой. Итак, если «F9» - это ячейка, которая изменилась, мне нужно сложить «C9» в «AG9» =SUM(F9:AG9). Я думаю, что мне нужно было бы поместить код в лист, в котором я пытаюсь обнаружить изменение, и это выглядело бы примерно так:

Private Sub currentSheetChange(ByVal Target As Range)

Dim sht As Worksheet
Dim rfRange As Range
Dim numberOfColumns As Integer
Dim numberOfRows As Integer

numberOfColumns = getNumberOfColumns
numberOfRows = getNumberOfRows

Set sht = ThisWorkbook.Sheets("Current")
Set rfRange = sht.Range("C3:" & Cells(numberOfRows, numberOfColumns)

If Not Intersect(Target, sht.Range(rfRange)) Is Nothing Then

Насколько я это сделал до сих пор. Если это работает к этому моменту, я не уверен, как узнать, какая ячейка изменилась. Я также предполагаю, что я бы использовал sht.Range("AH" & rowNumber).Formula = для ввода формулы в ячейку.

1 Ответ

0 голосов
/ 15 октября 2019

Это позволяет мне динамически вводить формулы в ячейки на основе строки ячейки, которая была изменена.

Я решил немного изменить свои требования. Я не хотел, чтобы формула вводилась в ячейку, потому что кто-то мог ее изменить. У меня был VBA, чтобы сделать математику и поместить результаты в камеру. Я оставил новый код закомментированным, поскольку он не ответил на мой первоначальный вопрос , но я хотел показать оба пути, чтобы были варианты.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim numberOfColumns As Long
Dim numberOfRows As Long

numberOfColumns = getNumberOfColumns 'Function call to a function on another sheet
numberOfRows = getNumberOfRows 'Function call to a function on another sheet

If Not Intersect(Target, Me.Range("C3", "AG" & numberOfRows)) Is Nothing Then
    Me.Range("AH" & Target.Row).Formula = "=SUM(C" & Target.Row & ":" & "AG" & Target.Row & ")"
    'Range("AH" & Target.Row).Value = Range("B" & Target.Row).Value - Evaluate("SUM(C" & Target.Row & ":AG" & Target.Row & ")") **New code**
End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...