这是一个问题的延续擅长不同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
尝试此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
除了使用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))