通过带或不带VBA的数组公式。用于动态范围的数组公式

通过带或不带VBA的数组公式。用于动态范围的数组公式,vba,excel,excel-formula,array-formulas,Vba,Excel,Excel Formula,Array Formulas,我正在尝试翻译以前在Excel工作表上没有VBA的程序 这将插入一个数组公式: ={MAX(如果(C2:C355=C2,F2:F355))}进入单元CE2 并将其向下拖动到数据集的底部,该数据集是可变的 我尝试了通过变量数据集循环的不同选项,例如: Dim i作为变量 LastRow=工作表(“Sheet1”).Range(“A”和Rows.Count).End(xlUp).Row 对于i=2到最后一行 单元格(i,83)。FormulaArray=“=MAX(如果(单元格(2,最后一行)=单元

我正在尝试翻译以前在Excel工作表上没有VBA的程序

这将插入一个数组公式:

={MAX(如果(C2:C355=C2,F2:F355))}进入单元CE2

并将其向下拖动到数据集的底部,该数据集是可变的

我尝试了通过变量数据集循环的不同选项,例如:

Dim i作为变量
LastRow=工作表(“Sheet1”).Range(“A”和Rows.Count).End(xlUp).Row
对于i=2到最后一行
单元格(i,83)。FormulaArray=“=MAX(如果(单元格(2,最后一行)=单元格(5,i),单元格(2,最后一行))”
接下来我
以下代码似乎可以工作,但我尝试将代码工作到动态循环中会导致错误:

Range("CE2").FormulaArray = "=MAX(IF(C:C=C2,F:F))"
通常错误是:

“无法设置range类的FormulaArray属性”

我注意到,通过VBA将数组公式放置在工作表上的速度很慢。我猜想有一种方法可以实现与通过VBA放置的公式相同的结果,而不使用
。VarriantArray

我已经研究了MAX函数

我该怎么办

  • 循环遍历动态数组并将我的数组公式放在工作表上

  • 使用VBA函数而不是
    。ArrayFormula
    ,获得与我的数组公式相同的结果


  • 您的
    单元格的行和列似乎颠倒了,所以我猜您想要:

    Cells(i, 83).FormulaArray = "=MAX(IF(R2C3:R" & LastRow & "C3=R[0]C3,R2C5:R" & LastRow & "C5))"
    

    这不需要使用FillDown的循环:

    Dim LastRow As Long
    With Worksheets("Sheet1")
        LastRow = .Range("A" & .Rows.Count).End(xlUp).row
        .Cells(2, 83).FormulaArray = "=MAX(IF(" & .Range(.Cells(2, 3), .Cells(LastRow, 3)).Address(1, 1) & "=C2," & .Range(.Cells(2, 6), .Cells(LastRow, 6)).Address(1, 1) & "))"
        .Range(.Cells(2, 83), .Cells(LastRow, 83)).FillDown
    End With