SSブログ

エクセルのちょっといい話(5) [システムトレード]

エクセルにおいて、比較的多用する関数の一つにSUM関数があります。ご存知のように、これは指定したセル範囲内の全ての数値の和を求める関数です。
SUM関数は非常に便利な関数ですが、使い方によってはエクセルの動作速度に大きな影響を与える場合があることは、以前述べた通りです。

SUM関数は、連続したセル範囲の合計を求めるだけではなく、飛び飛びのセルの値の和を求めることもできます。
その際、計算対象のセルが数値以外であっても、エラーが発生しないので便利です。

例えば、A1セルとA2セルの合計を求めるような場合、SUM関数を用いて「=SUM(A1:A2)」もしくは、「=SUM(A1,A2)」としてやれば、A1とA2のいずれかが数値でない場合(空白を含む)でも、数値のみの合計を計算してくれます。また、共に数値でない場合は、0を返します。

トレーディングシステムでは、株式の保有状態を明確にするために、数値列の中にわざと空白セルを設ける場合があります。
そのようなセルを含むいくつかのセルの合計を求める時に、単純にセルを足し合わせるだけだとエラーが生じてしまうことがあります。

例えば、B5セルとD5セルの和を求めたい場合、普通であれば「=B5+D5」とすればいいのですが、これらのセルに数値以外の内容が含まれていると、計算結果が「#VALUE!」になってしまいます。
これを避けるためには、「=SUM(B5,D5)」としてやればいいわけです。

ちなみに、SUM関数は引数(ひきすう)を30個まで指定することができます。また、それらの中には、連続したセル範囲を指定することもできます。
更には、同じセル範囲を引数に複数指定することもでき、その場合は、重複した範囲が重複した回数分計算されます。

例えば、B2セルに1、B3セルに2、B4セルに3が入力され、適当なセルに「=SUM(B2:B4,B2:B4)」と入力すると、計算結果として12が得られます。
このように便利なSUM関数ですが、私が確認した範囲では、処理速度は単純にセル同士を足し合わせる場合よりも若干遅いようです。

例えば、空白を含むある2つのセルの値の和を求めるような場合、「=SUM(B5,D5)」とする代わりに、「=IF(B5="",0,B5)+IF(D5="",0,D5)」としてやった方が、わずかながらではありますが、処理速度が向上することを確認しています。

そう考えると、例えばMAX関数なども、「=MAX(B5,D5)」とする代わりに、「=IF(B5>D5,B5,D5)」とした方が処理速度が向上するのではないかと試してみたのですが、残念ながら、こちらの方はわずかに遅くなるという結果になりました。

ただ、これらの結果は、多くの計算式を含むシートの一部を変更して、テーブル演算を行った場合の処理時間を比較したものであり、必ずしも全ての場合に当てはまるものではありません。
また、いずれの場合もごくわずかな差ですので、自分にあった方法を用いればいいのではないかと思います。

さて、SUM関数にはいくつかの類似関数があります。例えばSUMSQ関数は、引数の2乗の合計を算出します。また、SUMPRODUCT関数は、配列内の対応する要素同士の積を計算し、それらの値の合計を算出します。

これらの関数を用いることで、例えば統計関数を構成する各項を容易に計算することができます。SLOPE関数やSTEYX関数の代わりに漸化式を用いるような場合、初期値は直接計算する必要がありますが、その際に余分な参照列を設けることなく初期値を求めることができます。

また、ある期間の売買総額を求める場合、期間内の株価終値と出来高の積を求めてそれらを合計する必要がありますが、SUMPRODUCT関数を用いれば直接求めることができます。
同様のことは配列数式を使ってもできますが、SUMPRODUCT関数の方が簡単です。

上記以外にも、2つの配列間の平方差の合計を算出するSUMX2MY2関数や、平方和の合計を算出するSUMX2PY2関数、また、2つの配列間の対応する要素の差の2乗和を算出するSUMXMY2関数などがあり、使い方によっては大変便利です。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。