不带数组公式的 MAXIFS 代入

Substitution for MAXIFS without array formula

查询完成后,我使用下面的 vba 代码将以下公式与查询数据一起插入到 sheet 中。在 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

您可以使用 Excel 数组公式 =MAX(IF(B:B=A2,D:D,"")) 来查找条件最大值(您可以围绕此添加额外的错误检查等)。这将适用于 2016 年及更早版本的所有版本。

如果将其键入单元格,则需要按常规的 Crtl+Shift+Enter(称为 CSE)。

如果要通过代码输入此数组公式,需要将范围的FormulaArray 属性设置为上述,而不是公式属性。所以你的代码应该是:

.Range("EndRng").Offset(0, 1).FormulaArray = strInsertFormula

其中strInsertFormula就是我上面提到的数组公式

@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