2013年6月7日金曜日

ワークシート関数の引数にワークシート関数を使って可動範囲を指定する

行がどんどん追加されていくタイプの表。

つまり実績表、みたいなやつですね。これの内訳を常設のピボットテーブルで集計するときや、SUBTOTAL関数を一番上の行に置いておくみたいな運用するとき、どこまで行があるかわかんないから対象範囲を




"$A$2:$A$65536"


とかにしますよね。

でもこれってすごいメモリ的に無駄なんですよね。

実はExcelって使ってるオブジェクトなんかを一旦丸っとメモリに読み込んでるらしいのです。詳しいことはあまりよくわかってないんだけど、VBAなんか使ってると使う機会もある『CurrentRegion』というやつの正体が見えた気がしました。

でも、じゃあどうすりゃいいんだよってことで知ったのが下の方法。
(以下、続き)



例えばオートフィルタで表示中のデータだけの集計(A列の合計[SUM関数])をしたい時の例ですが、




SUBTOTAL(9,$A$2:INDEX($A:$A,COUNT($A:$A)+1))


こんな方法があったのかと。関数の引数(Range)をこんなふうに指定することができるのか!みたいな軽い衝撃でしたが、VBAで範囲指定するときのアドレスって結局文字列(String型)だったりしますよねよく考えると。

そんなこんなでINDEX関数を使った範囲終端の指定ってかなり応用が効きそうです。

最近のPCってスペックが上がってメモリなんていっぱい積んでることがほとんどなのであまり実感できないかもですが、実際ファイルの保存や開く時の速度上がってる気がするんで、やっぱり関係あるんだろうね。

それに、Excel2007以降は「65536行の呪縛」から解き放れたって聞いたので、そしたらきっと使っておいたほうがCPUとかにも優しいはずです。

0 件のコメント:

コメントを投稿