这是问题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
答案 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))