【问题标题】:VBA Subroutine to fill formula down columnVBA子程序填充公式向下列
【发布时间】:2015-12-06 21:07:27
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: vba excel excel-formula autofill


    【解决方案1】:

    你真正需要的公式是

    =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

    【讨论】:

      【解决方案2】:

      您可以使用它来根据 A 列填充 B:D 列

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-22
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        相关资源
        最近更新 更多