1

これは、excel different SUM.IF array functionという質問の続きですが、解決済みとしてマークしたので、新しい質問を作成しました。

私が欲しかったのは、いくつかの値の明確な合計であり、@Marc のソリューションを実装しました。ただし、レポートの要件が変更されました。非表示のすべての値を除外する必要がありますが、元の計算方法は維持します。基本的に、SUBTOTAL(109, ref) が機能するのと同じ方法で機能を追加したいと考えています。

このために、セルに応じて 0 または 1 を返す単純な VBA 関数 CellIsNotHidden(Range) を作成しました。

したがって、私の最善の推測は次のような式になります。{=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。これは、1 次元 (ベクトル) および 2 次元の配列を処理します。テスト済み:

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 に答える