VBA 用于向下列填充公式的子例程

VBA Subroutine to fill formula down column

我有一个当前的 Sub,它可以以某种方式为我组织数据,甚至可以在工作表的第一行中输入一个公式,但我 运行 正在考虑希望它能够调整的问题根据相邻列的 empty/not 空状态向下填充公式的距离。例如,每次我 运行 一份报告,我都会得到不可预测数量的返回记录,这些记录将填充 A 列中的行,但是,由于我想从这些返回的记录中提取字符串到不同的列中,我有在接下来的三列(B、C 和 D)中输入每次迭代的公式。有没有办法插入一行来计算 A 列中非空白的行数,然后将 B、C 和 D 列中的公式填写到最后一行? (我知道在第一行输入信息后表格会自动执行此操作,但出于后勤原因,我不能使用表格)。

我当前填写 B 列第 2 行公式的代码是:

Range("B2").Select
ActiveCell.FormulaR1C1 = "=MID(RC[-1],FIND(""By:"",RC[-1])+3,22)"

谢谢!

您实际需要的公式是

=IF(A2="","",MID(A2,FIND("By:",A2)+3,22))

而不是

=MID(A2,FIND("By:",A2)+3,22) '"=MID(RC[-1],FIND(""By:"",RC[-1])+3,22)"

这会检查单元格 A 中是否有任何内容,然后根据“”执行“

另外 Excel 允许您在 一次性 范围内输入公式。所以如果你想让公式进入单元格,比如A1:A10,那么你可以使用这个

Range("A1:A10").Formula = "=IF(A2="","",MID(A2,FIND("By:",A2)+3,22))"

现在我们如何确定10?即最后一行。简单

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long

    '~~> Change the name of the sheet as applicable
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        '~~> Find Last Row in Col A
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        .Range("B2:B" & lRow).Formula = "=IF(A2="""","""",MID(A2,FIND(""By:"",A2)+3,22))"
    End With
End Sub

More About How To Find Last Row

您可以使用它来填充基于列 A

的列 B:D
Range("B2:D" & Range("A" & Rows.Count).End(xlUp).Row).Formula = _
    "=MID($A2,FIND(""By:"",$A2)+3,22)"