通过VBA完成的Excel中的数组公式不带或不带.ArrayFormula对于dynamic范围

我正试图在Excel表格上“翻译”一个以前没有使用VBA的程序。 这个简单的过程就是将这个数组公式(=(MAX(IF(C2:C355 = C2,F2:F355))}}插入到单元格CE2中,并将其拖放到数据集的底部(这是可变的)。

我正在寻找这样做的一个VBAmacros的一部分。 我已经尝试了很多不同的select,循环遍历一个可变的数据集,但仍然遇到问题。

这些包括:

Dim i As Variant LastRow = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row For i = 2 To LastRow Cells(i, 83).FormulaArray = "=MAX(IF(cells(2,LastRow)= cells(5,i),cells(2,LastRow))" Next i 

下面的代码似乎工作,但我的代码工作到dynamic循环的尝试会导致错误:

 Range("CE2").FormulaArray = "=MAX(IF(C:C=C2,F:F))" 

通常这些错误是:“无法设置范围类的FormulaArray属性”。

我注意到,通过VBA放在表单上的数组公式非常慢。 我猜测有一种方法可以通过VBA实现与我的公式相同的结果,而不使用.VarriantArray? 我已经看过VBA的MAX函数,但是恐怕VBA命令有点过头了。

任何人都可以提供帮助:

  1. 如何通过dynamic数组循环,并通过macros将我的数组公式放置在工作表上

要么

  1. 使用除.ArrayFormula之外的VBA函数获得与我的数组公式相同的结果

提前谢谢了!

这没有循环使用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 

你好像有Cells的行和列颠倒,所以我猜你想要:

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