Excel“小计”数组公式 – 其他forms的sum.if

这是excel不同的SUM.IF数组函数的问题的延续,但是由于我已经标记为解决了,所以我创build了一个新的问题。

我想要的是一些有价值的东西,我实现了@ Marc的解决scheme。 但是报告要求已经改变。 我现在需要排除所有隐藏的值,但仍保持原来的计算方法。 基本上我想要以一个SUBTOTAL(109,ref)工作的相同方式添加一个function。

为此,我创build了一个简单的VBA函数CellIsNotHidden(Range),根据单元格返回0或1。

因此,我最好的猜测会是一个公式: {=SUM(IF($B1:$B7<>$B2:$B8,D2:D8,0)*CellIsNotHidden(D2:D8))}

但是这个函数不起作用,因为CellIsNotHidden不是一个数组函数。

我该如何解决这个问题?

提前,谢谢

贡纳尔

编辑:

以为我应该包括简单的VBAfunction:

  Function CellIsNotHidden(InputRange As Range) If InputRange.Cells.Height = 0 Then CellIsNotHidden = 0 Else If InputRange.Cells.Width = 0 Then CellIsNotHidden = 0 Else CellIsNotHidden = 1 End If End If End Function 

试试这个UDF CellIsNotHidden 。 这将处理1d(vector)和2d数组。 testing:

 Function CellIsNotHidden(MyRange As Range) As Variant Dim RootCell As Range Dim tmpResult() As Long Dim i As Long Dim j As Long On Error GoTo Whoops ReDim tmpResult(0 To MyRange.Rows.Count - 1, 0 To MyRange.Columns.Count - 1) Set RootCell = MyRange.Cells(1, 1) For j = 0 To MyRange.Columns.Count - 1 For i = 0 To MyRange.Rows.Count - 1 tmpResult(i, j) = Not (RootCell.Offset(i, j).EntireColumn.hidden Or RootCell.Offset(i, j).EntireRow.hidden) Next i Next j CellIsNotHidden = tmpResult On Error GoTo 0 Exit Function Whoops: Debug.Print Err & " " & Error End Function 

而不是使用UDF CellIsNotHidden(D2:D8)你也可以尝试以下任一种:

 SUBTOTAL(109,OFFSET(D2,ROW(D2:D8)-ROW(D2),)) SUBTOTAL(109,OFFSET(D2:D8,ROW(D2:D8)-MIN(ROW(D2:D8)),,1))