1

这是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
4

2 回答 2

2

试试这个 UDF CellIsNotHidden。这将处理一维(向量)和二维数组。测试:

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
于 2012-05-08T00:03:33.807 回答
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))
于 2012-05-08T08:30:57.400 回答