<< オートフィルタのバグ | main | 分析ツールの関数が標準で使える >>

配列数式での列指定が可能

配列数式を使わない人には関係ない話ですが。
今までのExcelでは、配列数式の参照セルに列全体を指定することができませんでした。
まず普通の配列数式。Excel 2003です。



セルE2には

{=SUM(IF(A1:A8=$D$2,B1:B8,0))}


という配列数式が入力されています。参照しているセル範囲は「A1:A8」と「B1:B8」です。
これを「A列全体」と「B列全体」というように指定してみます。入力されているデータが可変のときは、ついこうやりたくなりますよね。



ところが、配列数式の引数には"列全体"を指定することができませんでした。これがExcel 2007では可能になっています。
こちらも最初は普通の配列数式から。



問題ないですね。続いてExcel 2003ではエラーになった"列全体"の指定です。



というように正しい結果を返してくれます。

ところで、Excel 2007はワークシートの領域が大きくなっています。Excel 2003で"列全体"ということは、ワークシートの行数である65,536個のセルが計算対象となるのに対して、Excel 2007のワークシートは1,048,576行もあります。同じように"列全体"を参照してしまうと、ナント16倍も大きいセル範囲を指定することになります。これは、速度的にどうなんでしょう?いくら配列数式といっても、再計算に一晩かかるようでは使い物になりません。

実際に計測してみました。上で使ったワークシートの計算に要する時間です。なお、Excel 2003は列全体を指定できませんので、65535セルを参照しています。

【Excel 2003】




【Excel 2007】




「計算所要時間」とは、数式が初めて計算(評価)されるときに要する時間です。「再計算所要時間」は、一度計算された数式が二度目以降に行う再計算です。Excelには"スマート再計算エンジン"というのが搭載されていて、一度計算した数式は、その数式に影響を及ぼすセルが変化したときだけ、もう一度はじめから計算をやり直す仕組みになっていますので、二度目以降の再計算は、一度目に比べて非常に高速です。

計測してみると、やはりExcel 2007の方が遅いですね。しかし、無理もありません。「A:A」と「B:B」で合計2,097,152個のセルを参照しているのですから。配列数式に列全体を指定できるようになったからといって、多用すると計算時間も増大するかもしれませんね。

なお、上の計測結果はあくまで"目安"とお考えください。Excelで数式の計算時間を計測するのは、かなりデリケートな作業です。上に書いたように、一度目と二度目以降では計算方法が変わってきますし、数式におけるセルの依存関係を表す"計算チェーン"の構成と再構成も計算時間に影響してきます。さらに、Windowsのキャッシュも無視できません。計測の環境とタイミングによっては、異なる数値が導き出されるかもしれません。そのうち、数式の計算時間を計測するベンチマークでも作って、詳細に検討してみましょう。いずれにしても、列全体を参照した場合は、より多くのセルを参照することになるExcel 2007の方が、若干遅いのは間違いないと思います。

コメント
コメントする









この記事のトラックバックURL
トラックバック
Topページへ戻る
カレンダー
   1234
567891011
12131415161718
19202122232425
2627282930  
<< September 2010 >>
プロフィール

Excel MVP
スポンサードリンク
リンク
Office TANAKA

Excel 2010 Preview Blog

Office TANAKA 不定期ブログ

Excel World

VSUG

拙著
拙著
拙著
拙著
拙著
categories
archives
recent comment
recent trackback
others
mobile
※当ブログではPNG形式の画像を使っているため、携帯では画像を表示できないこともあります。
search this site.