Excel VBA:使用公式自动填充多个单元格

use*_*328 15 excel vba excel-vba

我从不同的文件中收集了大量数据.在这个主要工作簿中,我为每个单元格提供了不同类型的公式.在范围A到F中是收集来自其他文件的数据的位置.在H到AC的范围内,每次输入新数据时,我都会通过手动拖动来自动填充公式.下面的代码是我使用的,它只有6个不同的公式,我想自动填充.

Application.ScreenUpdating = False

lastRow = Range("B" & Rows.Count).End(xlUp).Row
Range("D2").Formula = "=$L$1/$L$2"
Range("D2").AutoFill Destination:=Range("D2:D" & lastRow)

Range("E2").Formula = "=$B2/2116"
Range("E2").AutoFill Destination:=Range("E2:E" & lastRow)

Range("F2").Formula = "=$D$2+(3*SQRT(($D$2*(1-$D$2))/2116))"
Range("F2").AutoFill Destination:=Range("F2:F" & lastRow)

Range("G2").Formula = "=$D$2-(3*SQRT(($D$2*(1-$D$2))/2116))"
Range("G2").AutoFill Destination:=Range("G2:G" & lastRow)

Range("H2").Formula = "=IF($E2>=$F2,$E2,NA())"
Range("H2").AutoFill Destination:=Range("H2:H" & lastRow)

Range("I2").Formula = "=IF($E2<=$G2,$E2,NA())"
Range("I2").AutoFill Destination:=Range("I2:I" & lastRow)
ActiveSheet.AutoFilterMode = False

Application.ScreenUpdating = True
Run Code Online (Sandbox Code Playgroud)

但是,在主工作簿中,有15个不同的公式,我希望每次新数据进入时自动填充.我有多个主要工作簿,并且公式不是常数.为每个公式插入上面的代码是一件痛苦的事.有没有办法可以让程序自动拖动它?在主要工作簿中,我已经写出了公式.我尝试了许多不同的代码使其自动填充,但到目前为止,上面的那个是唯一一个没有给我错误的工作.我试过使用类似这个或类似版本的东西,但没有一个工作:

With wbList.Sheets("Attribute - 10 mil stop")
    lastRow = Worksheets(ActiveSheet.Name).Range("B2").Rows.Count
    'Worksheets(ActiveSheet.Name).Range(Selection, Selection.End(xlDown)).Select
    Worksheets(ActiveSheet.Name).Range("D2:I2").Select
    Selection.AutoFill Destination:=Range("D2:I" & Range("B2" & Rows.Count).End(xlDown).Row)
End With
Run Code Online (Sandbox Code Playgroud)

我对代码搞砸了很多.我甚至都不知道它是否会像那样.谢谢你的帮忙!

Jer*_*ino 39

你正在寻找的方法是FillDown.另一种方法是让你不必每次都放开头来将公式存储在一个字符串数组中.结合它们为您提供了一种强大的方法来输入众多公式.代码如下:

Sub FillDown()

    Dim strFormulas(1 To 3) As Variant

    With ThisWorkbook.Sheets("Sheet1")
        strFormulas(1) = "=SUM(A2:B2)"
        strFormulas(2) = "=PRODUCT(A2:B2)"
        strFormulas(3) = "=A2/B2"

        .Range("C2:E2").Formula = strFormulas
        .Range("C2:E11").FillDown
    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

截图:

行结果.Range("C2:E2").Formula = strFormulas:

在此输入图像描述

行结果.Range("C2:E11").FillDown:

在此输入图像描述

当然,你可以通过将最后一行存储到变量中并将其转换为.Range("C2:E" & LRow).FillDown类似于你所做的事情来使其动态化.

希望这可以帮助!


use*_*261 6

根据我的评论,这是获得你想要的东西的一种方法:

首先选择您范围内的任何单元格,然后按Ctrl+T

这会弹出这个:

在此输入图像描述

确保你的表格文本在哪里是正确的,然后点击确定你现在将拥有:

在此输入图像描述

现在,如果在D中添加列标题,它将自动添加到表中一直到最后一行:

在此输入图像描述

现在如果您在此列中输入公式:

在此输入图像描述

输入后,公式将自动填充到最后一行:

在此输入图像描述

现在,如果您在表格下的下一行添加新行:

在此输入图像描述

输入后,它将调整为表格的宽度,所有带公式的列也将被添加:

在此输入图像描述

希望这能解决你的问题!