查询完成后,我使用下面的vba代码将下面的公式与查询数据一起插入工作表中。所有功能都可以在Excel Office365上很好地工作,但是如果Excel的版本为2016独立,则公式将失败并显示#NAME错误,因为该功能在该版本中不可用。我有一些坚持的用户。
我知道公式数组可以代替它,但是我不确定如何执行此操作并将其插入代码中,以及什么最有效的公式可以代替此数组。
=IF(OR(ISERROR(MAXIFS(Consumed!D:D,Consumed!B:B,A2)),
MAXIFS(Consumed!D:D,Consumed!B:B,A2)=0),"",
MAXIFS(Consumed!D:D,Consumed!B:B,A2))
任何帮助表示赞赏。
strInsertFormula = "=IF(OR(ISERROR(MAXIFS(Consumed!D:D,Consumed!B:B,A2)),MAXIFS(Consumed!D:D,Consumed!B:B,A2)=0),"""",MAXIFS(Consumed!D:D,Consumed!B:B,A2))"
With Sheet3
.Range("Individual_Bottles").Columns(.Range("EndRng").Offset(0, 1).Column).Insert Shift:=xlToRight
.Range("EndRng").Offset(-1, 1).Cells(1, 1).Value = "Last Drank"
.Range("EndRng").Offset(0, 1).Formula = strInsertFormula
.Range("EndRng").Offset(0, 1).NumberFormat = "yy/mm/dd"
End With
答案 0 :(得分:0)
您可以使用Excel数组公式=MAX(IF(B:B=A2,D:D,""))
查找条件最大值(您可以在此周围添加额外的错误检查等)。这将适用于2016年或更早的所有版本。
如果将其键入到单元格中,则确实需要按通常的Crtl + Shift + Enter(称为CSE)。
如果要通过代码输入此数组公式,则需要将范围的FormulaArray属性设置为上述值,而不是Formula属性。因此,您的代码应为:
.Range("EndRng").Offset(0, 1).FormulaArray = strInsertFormula
其中strInsertFormula
是我上面提到的数组公式。
答案 1 :(得分:0)
@JohnF好了,感谢John F,我开始了它的工作。我本以为我必须使用循环,但希望不要这样做。最后,我做了,因为我相信FillDown方法需要选择范围,而我不想这样做。这是最终代码
ii = .Range("EndRng").rows.Count
ConsRows = Consumed.Range("Consumed").rows.Count
For i = 1 To ii
strInsertFormula = "=IF(IFERROR(MAX(IF(Consumed!B1:B" & ConsRows & "=" & _
.Range("A1").Offset(i, 0).Address & _
",Consumed!D1:D" & ConsRows & ","""")),0)>0,MAX(IF(Consumed!B1:B" & ConsRows & "=" & _
.Range("A1").Offset(i, 0).Address & _
",Consumed!D1:D" & ConsRows & ","""")),"""")"
.Range("EndRng").Offset(0, 1).Cells(i, 1).FormulaArray = strInsertFormula
Next
End If