vba代码中的数组公式与应对公式

Posted

技术标签:

【中文标题】vba代码中的数组公式与应对公式【英文标题】:Array Formula in vba code with coping the formula down 【发布时间】:2018-02-25 19:46:08 【问题描述】:

我编写的代码将根据 N:N 列中的记录数计算数组公式,该列早于 11 列(偏移量 11)。我想将公式与数组一起使用,该数组将使用 N:N 列中的并行行并向下复制,直到 N:N 列中的最后一条记录存在。但是,目前,公式仅根据第一条记录向下复制,而不是并行获取行:

With ThisWorkbook.Sheets("Sheet1")

TargetRow = 4 

   .Range("N4", .Cells(Rows.Count, "N").End(xlUp)).Offset(0, 11).FormulaArray = "=IFERROR(Name&INDEX(Names_Area,MATCH(RC[-11],Name&Name_Origin,0),2),"""")"

    End With

我听说过填充功能或类似功能,但我不知道如何在此处插入。 我该如何解决它,所以当公式向下复制到行时,它会并行使用该行,而不是所有时间 N4(即第一行记录)。 我将不胜感激。

我还想提一下,任何其他没有数组的公式都可以工作,并根据 N:N 列中并行的行复制公式。

【问题讨论】:

.AutoFill 应该适用于范围 【参考方案1】:

尝试使用 .Autofill。类似:

With ThisWorkbook.Sheets("Sheet1")

    TargetRow = 4 

    .Range("N4").FormulaArray = "=IFERROR(Name&INDEX(Names_Area,MATCH(RC[-11],Name&Name_Origin,0),2),"""")"
    .Range("N4").AutoFill .Range("N4:N12")

End With

我使用了 N12 的示例终点作为您可以调整的自动填充。

虽然请注意,您实际上将使用以下内容进入 Y 列:

.Range("N4", .Cells(Rows.Count, "N").End(xlUp)).Offset(0, 11)

因此,您可能希望确保在要填充的实际列中自动填充和填充公式。

可能是这样的:

.Range("N4").Offset(0, 11).FormulaArray = 

参考:

https://www.mrexcel.com/forum/excel-questions/500971-how-copy-array-formula-down-vba-macro.html

【讨论】:

嗨 QHarr,我已经尝试过使用您的想法:.Range("N4", .Cells(Rows.Count, "N").End(xlUp)).Offset(0, 11)。 FormulaArray = "=IFERROR(RU_Project.ID&INDEX(RU_WBS_Area,MATCH(RC[-11],RU_Project.ID&RU_WBS_Origin,0),2),"""")" .Range("N4").AutoFill .Range("N4 :N12" 但是下一行的公式结果仍然基于第一个 N4 的结果,而不是根据列 N:N 中的并行行 我认为你必须申请一列而不是 N 到 Y (?)。否则,在填写之前,您需要所有相关列的第一行中的公式。它会向下填充而不是向下填充。【参考方案2】:

你也可以使用

With ThisWorkbook.Sheets("Sheet1")
    With .Range("N4", .Cells(Rows.Count, "N").End(xlUp)).Offset(0, 11)
        .Cells(1, 1).FormulaArray = "=IFERROR(Name&INDEX(Names_Area,MATCH(RC[-11],Name&Name_Origin,0),2),"""")"
        .Formula = .Cells(1, 1).Formula
    End With
End With

【讨论】:

您好,我已经尝试过您的代码,但可能我误解了,因为我没有得到正确的结果。按部分:'.Cells(1,1)' 你只是给出一个放置结果的例子吗?因此,如果我的结果应该从 Y 列开始,目标第 4 行,代码的一部分应该是:'.Cells(4,26)' 吗?还是怎么做? 不。 .Cells(1,1) is pointing at the first cell in the _referenced_ range in the With` 声明。因此,在这种情况下,它指向“Sheet1”工作表的单元格“N4” @Dozens,请对照您的原始问题数据检查我的代码,如果它按照本网站规则工作,您可以考虑将答案标记为已接受。否则,您可以回来详细说明什么不起作用。如果您必须更改您的原始问题数据,那么您可以发布一个问题以及您的努力 好的,我会这样做的

以上是关于vba代码中的数组公式与应对公式的主要内容,如果未能解决你的问题,请参考以下文章

vba中的相对参考小计公式

使用公式将数组从 VBA 函数输出到 Excel 工作表

Excel公式中的VBA命名范围

应用公式,然后自动填充数据,直到列中的最后一个可见单元格:VBA

基于公式的单元格值触发的 VBA 电子邮件代码

VBA代码在数据透视表旁边的列中向下拖动公式