的Excel“小计”阵列式 - sum.if的其他形式(Excel “Subtotal” arra

2019-09-26 15:22发布

这是一个问题的延续擅长不同SUM.IF阵列功能 ,但是因为我已经标志着作为解决,我创建了一个新的问题。

我想有一些价值的独特之和,我已经实现@马克的解决方案。 但是,该报告的要求发生了变化。 我现在需要排除被隐藏的所有值,但仍保持原有的计算方法。 Basicly我想以同样的方式小计(109,REF)将工作添加一个功能。

该I已经创建了一个简单的VBA函数CellIsNotHidden(范围),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

Answer 1:

尝试此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


Answer 2:

除了使用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))


文章来源: Excel “Subtotal” array formula - Other form of sum.if