4

複数のネストされた IF ステートメントを含む SUM 配列数式があり、非常に非効率的です。私の数式は 500 行を超えていますが、簡単なバージョンを次に示します。

{=SUM(IF(IF(A1:A5>A7:A11,A1:A5,A7:A11)-A13:A17>0,
IF(A1:A5>A7:A11,A1:A5,A7:A11)-A13:A17,0))}

ご覧のように、数式の前半では、配列が 0 より大きい場所をチェックし、ゼロより大きい場合は、数式の 2 番目の部分でそれらを合計します。

同じ IF ステートメントが 2 回繰り返されていることに気付くでしょう。これは私にとって非効率的ですが、正しい答えを得る唯一の方法です。

私が持っているサンプルデータは次のとおりです。

スプレッドシートのサンプル データ http://clients.estatemaster.net/SecureClientSite/Download/TempFiles/example.jpg 上記の式を使用すると、この場合の答えは 350 になります。

配列内に MAX ステートメントを入れようとした場合、ゼロより大きい場所を見つけるためにテストを削除すると、次のようになりました。

{=SUM(MAX(IF(B2:B6>B8:B12,B2:B6,B8:B12)-B14:B18,0))}  

ただし、各範囲のデータの最初の行のみを計算しているようで、70 という間違った答えが返されました。

数式のサイズを小さくしたり、そこに IF ステートメントを繰り返す必要がないことでより効率的にしたりできることを知っている人はいますか?


アップデート

ジミー

あなたが提案したMAX式は、実際にはすべてのシナリオで機能しませんでした.

以下のように行 1 から 5 のサンプル データを変更した場合 (一部の数値が行 7 から 11 のそれぞれのセルよりも大きく、一部の数値が小さいことを示しています)

スプレッドシートのサンプル データ http://clients.estatemaster.net/SecureClientSite/Download/TempFiles/example2.jpg

私が達成しようとしている正解は 310 ですが、MAX 式は 275 という間違った答えを与えると提案しました。

正しい答えを得るには、式が配列関数である必要があると推測しています。

他の提案はありますか?

4

5 に答える 5

3
=MAX( MAX( sum(A1:A5), sum(A7:A11) ) - sum(A13:A17), 0)
于 2008-11-25T00:45:44.127 に答える
1

より計算効率の高い (特に再計算効率の良い) 方法は、配列数式の代わりにヘルパー列を使用することです。

C1: =MAX(A1,A7)-A13
D1:=IF(C1>0,C1,0)

これらの両方を5行下にコピーします

E1:=SUM(D1:D5)

Excel は、単一の数値が変更されるたびに、配列数式によって暗示されるすべての仮想列を計算するのではなく、変更された値に依存する数式のみを再計算します。また、すべての数値を変更しても、計算が少なくなります。

于 2008-12-02T16:24:25.213 に答える
0

これはどうですか?

=MAX(SUM(IF(A1:A5>A7:A11, A1:A5, A7:A11))-SUM(A13:A17), 0)

編集:

うわー-投げるネガの部分を逃した。これはどうですか?それが速いかどうかわからない...

=SUM((IF(A1:A5>A7:A11,IF(A1:A5>A13:A17,A1:A5,A13:A17),IF(A7:A11>A13:A17,A7:A11,A13:A17))-A13:A17))

編集2:

これはあなたにとってどのように機能しますか?

=SUM((((A1:A5>A13:A17)+(A7:A11>A13:A17))>0)*(IF(A1:A5>A7:A11,A1:A5,A7:A11)-A13:A17))
于 2008-11-27T00:02:09.907 に答える
0

VB マクロ エディタを調べることをお勧めします。[ツール] メニューで、[マクロ] に移動し、[Visual Basic Editor] を選択します。これにより、独自の関数を作成できる完全なプログラミング環境が提供されます。

VB は単純なプログラミング言語であり、Google には必要なすべてのガイドブックがあります。

そこで、MySum() のような関数を作成し、自分で作成した明確な方法で、本当に必要な計算を実行させることができます。

私はこれをGoogleから引き出しました。これをすべて設定するための良いガイドのようです. http://office.microsoft.com/en-us/excel/HA011117011033.aspx

于 2008-11-25T04:51:09.590 に答える
0

これはうまくいくようです:

{=SUM(IF(A1:A5>A7:A11,A1:A5-A13:A17,A7:A11-A13:A17))}

編集 - 減算が負になるケースを処理しません

これは機能しますが、より効率的ですか???

{=SUM(IF(IF(A1:A5>A7:A11,A1:A5,A7:A11)>A13:A17,IF(A1:A5>A7:A11,A1:A5,A7:A11)-A13:A17,0))}
于 2008-11-25T18:54:09.233 に答える