Excel:在动态范围内插入公式

时间:2019-01-08 08:21:21

标签: excel

上下文:

根据一些输入列的大小,我想创建一列带有可调整为那些输入列的大小的公式的列。我知道如何使用VBA做到这一点,但我真的很想知道是否还有另一种方法可以做到这一点。

详细信息:

这是一个基本设置,其中A列和B列是值,C列由一个简单公式组成,其中范围C2特别具有公式=A2+B2。现在,我可以通过使用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);)来使A和B列成为动态范围,如下所示:

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 :(得分:2)

使用table(选择您的范围,然后选择 Insert> Table ),然后将C设为计算列。

enter image description here

这样,当您向表中添加更多行时,该公式将应用于该行中的C列。

答案 1 :(得分:1)

考虑只使用这样的事件过程。

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列具有值,则可以对公式进行调整以写入零,或者将单元格空白。

答案 2 :(得分:1)

在工作表代码中,使用change事件:

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