2012-05-07 8 views
1

これは質問excel different SUM.IF array functionの続きですが、解決済みとマークして以来、私は新しい質問を作成しました。Excel "小計"の配列式 - その他の形式sum.if

いくつかの値の明確な合計がありました。@ Marcのソリューションを実装しました。しかし、報告要件は変更されている。私は今、隠されているすべての値を除外する必要がありますが、元の計算方法はそのまま残しておきます。基本的には、SUBTOTAL(109、ref)と同じように機能を追加したいと思っています。

これは、セルに応じて0または1を返す単純なVBA関数CellIsNotHidden(Range)を作成しました。 CellIsNotHiddenは配列関数ではないので、{=SUM(IF($B1:$B7<>$B2:$B8,D2:D8,0)*CellIsNotHidden(D2:D8))}

しかし、この機能は動作しません:

したがって私の最高の推測では、のような式になります。

どうすればこの問題を解決できますか?

事前に

、感謝

グンナー

編集:

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

を使用すると、VBA機能 – Boud

+0

@Boud、不可視または可視各高さのために0または1の範囲を返してください:私は申し訳ありませんが、私は理解していない、 "機能CellIsNotHidden(範囲としてInputRangeとして範囲)"の上の行を変更して何も動作しません... –

答えて

2

はUDF CellIsNotHiddenのためにこれを試してみてください:

思想は、私は簡単なVBA関数を含める必要があります。これは1d(ベクトル)と2d配列を扱います。テストした:代わりに、UDF CellIsNotHidden(D2:D8)を使用しての

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 
+0

おかげでこの質問をお寄せいただきありがとうございます。これは私のライブラリでしばらく望んでいたコードですが、ユースケースを明確にするまで書くことはありませんでした。投票する! –

+0

こんにちは、そのコードはちょうど私が必要としたものです、魅力のように動作します。ありがとうございました –

1

あなたもこれらのいずれかを試みることができる:

SUBTOTAL(109,OFFSET(D2,ROW(D2:D8)-ROW(D2),)) 
SUBTOTAL(109,OFFSET(D2:D8,ROW(D2:D8)-MIN(ROW(D2:D8)),,1)) 
関連する問題