不带数组公式的MAXIFS替换

时间:2019-04-29 23:23:51

标签: excel vba excel-formula excel-2016

查询完成后,我使用下面的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

2 个答案:

答案 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