Excel: вставка формул в динамический диапазон - PullRequest
0 голосов
/ 08 января 2019

Контекст:

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

Подробности:

Это базовая установка, в которой столбцы A и B являются значениями, а столбец C состоит из простой формулы, в которой, в частности, диапазон C2 имеет формулу =A2+B2. Теперь я могу сделать столбцы A и B динамическими диапазонами, используя Formulas > Name Manager и вставляя формулы rng_A=OFFSET(Sheet1!$A$2;;;COUNTA(Sheet1!$A$2:$A$40);) и rng_B=OFFSET(Sheet1!$B$2;;;COUNTA(Sheet1!$B$2:$B$40);) следующим образом:

enter image description here

Это удобно для диаграмм, где вы можете использовать именованные диапазоны для динамического отображения данных, таких как:

enter image description here

Теперь, если я вставлю два новых числа в столбец A, диаграмма автоматически добавит их в строку:

enter image description here

Вопрос :

Если бы я хотел добавить столбец C на диаграмму, это можно было бы сделать так же легко, добавив новый именованный диапазон, но мне пришлось бы вставить две новые формулы в диапазоне C8 и C9. Можно ли каким-либо образом сделать столбец C динамическим диапазоном, состоящим из формул? Без заполнение всего столбца формулами, такими как =IF(A8="";"";A8+B8) здесь:

enter image description here

или с использованием фрагмента VBA?

Спасибо за любые предложения!

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Подумайте только об использовании процедуры обработки событий, подобной этой.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rng As Range

    If Target.Cells.CountLarge = 1 Then
        Set Rng = Range(Cells(2, "A"), Cells(Rows.Count, "A").End(xlUp).Offset(0, 1))
        If Not Application.Intersect(Target, Rng) Is Nothing Then
            Application.EnableEvents = False
            With Target
                Set Rng = Range(Cells(.Row, "A"), Cells(.Row, "C"))
            End With
            With Rng
                .Cells(3).Value = .Cells(1).Value + .Cells(2).Value
            End With
            Application.EnableEvents = True
        End If
    End If
End Sub

Всякий раз, когда вы вносите изменения в A или B, итоговое значение вносится в столбец C. Формула может быть настроена так, чтобы записать ноль, или очистить ячейку, если значение имеет только столбец B.

0 голосов
/ 08 января 2019

В коде листа, используя событие изменения:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Or Target.Column = 2 Then
Range("C" & Target.Row).Formula = "=A" & Target.Row & "+B" & Target.Row
End If
End Sub
0 голосов
/ 08 января 2019

Используйте таблицу (выберите свой диапазон и затем Вставка> Таблица ) и сделайте C вычисляемым столбцом.

enter image description here

Таким образом, когда вы добавляете больше строк в таблицу, формула применяется к столбцу C в этой строке.

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