我正在尝试"翻译"以前在Excel工作表上没有VBA的过程。这个简单的过程是将这个数组公式:= {MAX(IF(C2:C355 = C2,F2:F355))}插入单元格CE2并将其向下拖动到数据集的底部(可变)。
我希望将此作为vba宏的一部分完成。我已经尝试了许多不同的选项来循环遍历可变数据集,但仍然遇到问题。
这些包括:
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
以下代码似乎有效,但我尝试将代码转换为动态循环会导致错误:
Range("CE2").FormulaArray = "=MAX(IF(C:C=C2,F:F))"
通常错误是:"无法设置范围类&#34的FormulaArray属性。
我注意到通过VBA放置到工作表上的数组公式非常慢。我猜有一种方法可以通过不使用.VarriantArray的VBA实现与我的公式相同的结果?我已经研究了VBA的MAX函数,但我担心VBA命令有点过头了。
任何人可以提供任何帮助:
或
非常感谢提前!
答案 0 :(得分:1)
没有使用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
答案 1 :(得分:0)
您似乎已将Cells
的行和列反转,因此我猜测您想要:
Cells(i, 83).FormulaArray = "=MAX(IF(R2C3:R" & LastRow & "C3=R[0]C3,R2C5:R" & LastRow & "C5))"