Excel“小计”数组公式 - sum.if的其他形式

时间:2012-05-07 22:24:02

标签: arrays excel function sum

这是问题excel different SUM.IF array function的延续,但由于我已将其标记为已解决,因此我创建了一个新问题。

我想要的是一些不同的值,我已经实现了@ Marc的解决方案。但报告要求已发生变化。我现在需要排除所有隐藏的值,但仍保留原始计算方法。基本上我想以与SUBTOTAL(109,ref)相同的方式添加功能。

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

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

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

我该如何解决这个问题?

事先,谢谢

贡纳尔

编辑:

我认为我应该包含简单的VBA功能:

  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

2 个答案:

答案 0 :(得分:2)

尝试使用UDF CellIsNotHidden。这将处理1d(向量)和2d数组。测试:

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

答案 1 :(得分:1)

您可以尝试以下任何一种方法,而不是使用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))