不确定如何将公式动态粘贴到最后一列和最后一行

Posted

技术标签:

【中文标题】不确定如何将公式动态粘贴到最后一列和最后一行【英文标题】:Unsure How to Dynamically Paste a Formula To Last Column and Last Row 【发布时间】:2018-09-25 21:11:14 【问题描述】:

使用 Excel 2016(64 位)的 VBA 问题

我在前两列 (A:B) 和顶行 (1) 中有标题数据。我想动态地向下粘贴一个公式,从单元格 C2 开始,到最后一行 最后一列。工作原型如下:

    Dim LstCol As Long
        LstCol = Cells(1, Columns.Count).End(xlToLeft).Column
        Range(Cells(2, "C"), Cells(2, LstCol)).Value =         "=INDEX(RC1,MATCH(R1C,RC2,0))"
    Dim LstRow As Long
        LstRow = Cells(1, Rows.Count).End(xlUp).Row
        Range(Cells(2, "C"), Cells(2, LstRow)).Value = "=INDEX(RC1,MATCH(RC1,R2C,0))"

第一个 Dim 按预期工作。该公式已成功部署到第二行到最后一列(或者它可能从最后一列开始并向左移动)。但是,第二个 Dim 因错误而停止。我不确定如何将数据从最后一行(到最后一列)向上传播到第二行(以及相应的最后一列)。

在我的示例中,前两列的标题数据从 1 到 5330 (A1:B5330)。我在第一行(C1:AX1)中也有标题数据。我的目标是从 C2:AX5330 动态填充公式 =INDEX($A2,MATCH(D$1,$B2,0)) 。

我哪里错了?

【问题讨论】:

乍一看,LstRow 的表达式 (语义上) 不正确。该行应该是LstRow = Cells(Rows.Count, 1).End(xlUp).Row 而不是(您将Rows.Count 作为Column 的值) 如果要插入公式,需要使用Range.Formula而不是Range.Value 索引和匹配公式错误。 INDEX(array, row_num, [column_num]) 【参考方案1】:

您需要使用工作表正确限定 RangeCells 的实例。您可以直接执行此操作,使工作表变量变暗,或使用 With 块,如下所示:

Dim LRow as Long

With ThisworkBook.Sheets("????")
    LRow = .Range("A" & .Rows.Count).End(xlUp).Row 
    .Range("C2:AX5330").Formula = "=INDEX($A2,MATCH(D$1,$B2,0))" 'Make sure your cell references are correct here
    .Range("C2:AX5330").Value = .Range("C2:AX55330").Value 'Place as values instead of formula
End With

【讨论】:

以上是关于不确定如何将公式动态粘贴到最后一列和最后一行的主要内容,如果未能解决你的问题,请参考以下文章

Excel vba将公式从一列自动填充到Excel中的最后一列

填写公式直到列中的最后一行

在EXCEL中怎么样将多列数据合并成一列,并用分隔符隔开。

宏中的自动填充公式从 A 列到最后一列

如何使用变量“最后一行号”来设置另一列中的范围

excel函数,如何去除某列空值行,形成新的一列,求函数