3列の非常に単純なExcel2007ワークシートがあります。名前(列A)、Value1(列B)、およびValue2(列C)。このシートは、多くの場合、[名前]列によって自動フィルタリングされます。
2番目の列の下部で、次のルールを使用して、任意のフィルターを尊重し、列Bの条件付きSUBTOTALを実行します。特定の行の列Bが0の場合は、列Cのその行の値を使用します。それ以外の場合は、列Cは無視する必要があります。
A B C
1 Name Value1 Value2
2 Bob 100 6 <-- use 100, ignore 6 in Col C because B is non-zero
3 Bob 200 <-- use 200
4 Bob 0 50 <-- Col B=0, use C, thus 50 (and so on)
5 Bob 300
6 Ralph 10
7 Ralph 20 1 <-- use 20 from col B, ignore col 6.
8 Ralph 0 60
9 Ralph 50
10 Mary 1000
11 Mary 1200
12 Mary 0 250
13 Mary 1040
14 Subtotal 4280
これで、次の式を使用して、必要な合計値を取得できます。
= SUMPRODUCT(-(B2:B13 = 0)、C2:C13)+ SUBTOTAL(9、B2:B13)
ただし、SUMPRODUCTを使用すると、非表示/フィルター処理されたセルの要件を満たせなくなります。たとえば、Maryをフィルターで除外しても、合計が3690減少することはありません。また、SUBTOTALは(B2:B13 = 0)配列参照を使用できません。ですから、私の脳の大部分は、私がとんでもなく近づくことができると私に伝えようとしていますが、実際にはそこに到達することはできません。しかし、私は(あまりにも?)頑固でそれをすぐに諦めません:)
私の一部は、VBAを掘り下げずにこれを直接行うことはできないと言いたいのですが、このソリューションでは可能であれば避けたいと思います。私は、私が見たことがない(おそらく非常に単純な)解決策を指摘するために、問題について他の人の目を引くことは価値があると思いました。
編集1:私が指摘すべき明らかな解決策の1つは、単純なIF式を使用して4番目の列を追加し、それをSUBTOTALすることでした。それは確かに機能しますが、私はそれをこの状況に適応させることはできません。ここに示されている表は、任意の列の追加がオプションではないように、はるかに大きく、高度に構造化されたワークシートからの代表的な抜粋にすぎません。
編集2:私が提供したサンプルデータは、すべての列のまっすぐなSUBTOTALが問題を解決するという単純な推論を可能にしましたが、このデータが抽出された実際のデータには、列Bが非である場合でも列Cの値が含まれる場合があります零。その場合、列Cは無視する必要があります。列Bが存在する場合は、常に優先されます。それに応じて元のデータテーブルを修正しました。