エクセルVBAの技術向上マガジン

 
 
新創刊!

▼[無料]メルマガの登録
「エクセルVBA技術通信」
マガジンID:0000252815 
メールアドレス:

Powered by
まぐまぐ



発行者情報

メルマガの登録/解除

エクセルVBA開発事例

テクニカルライター

著者プロフィール

会社概要

TOP



高速化ランキング

エクセルVBAのシステムを高速化させるために効果的な技術・ノウハウのベスト5を発表していきます。

第1位 画面更新の非表示

第2位 CSVのシート取り込み

第3位 大量データのソート

第4位 セル指定の高速化

第5位 不要行の削除



使い易さランキング

エクセルVBAのシステムをより使い易くさせるため技術・ノウハウのベスト5を発表していきます。

・準備中です。



VBA入門講座

初心者向けのエクセルVBAが学べるサイトは、

こちら


 
■高速化ランキング【第1位】


今回発表していく高速化ランキングでは、「ちょっとしたテクニックを使う だけで、エクセルVBAがこんなにも早く、サクサクと動くようになる!」 といった内容を、その効果の高い順に独断と偏見もまじえてランキングし、 同時に実測した結果も発表していこうというものです。


それでは、さっそく今日はその第1位の発表です。
(本来なら下から発表するのが筋なんですが、今回はワケあって(後ほど お話しますが。。。)いきない1位!から発表させてもらいます。)


--------------------------------------------------------------------
【今日のテーマ】   画面更新の非表示
--------------------------------------------------------------------


ちょっと前置きになりますが、VBAのAというのは言わずと知れた(!?) アプリケーションの頭文字のAを指す訳ですが、エクセルVBAの場合は、 このアプリケーションが=(イコール)「エクセル」ということに他なりま せん。

一方、コンピュータシステムというものは、通常、入力・処理・出力の3つ のセッションからなっていますが、この内、入出力とりわけ出力というのが レスポンススピードのネックとなる場合が極めて多いものです。

エクセルVBAの場合は、この入出力の主なものは言うまでもなく「エクセ ルシート」と言うことになりますので、他のコンピュータシステム同様、 エクセルVBAの場合には、エクセルのシートへの入出力(とりわけ出力) というのが、VBAの処理スピードを左右する一番の要因である場合が極め て高いということになります。


そこで、このエクセルシートへの読み書きを早くする方法として、最もよく 知られているのが、今日「エクセルVBA高速化ランキング」第1位として 発表する「画面更新の非表示」というものです。


構文
―――――――――――――――――――――――――+
Application.ScreenUpdating = False
―――――――――――――――――――――――――+


これは、知る人ぞ知るエクセルVBAの高速化にはダントツで効果大である ことはよく知られていますから、今回あえて第1位から発表した(発表せざ るを得なかった)理由というのも、もし下から発表していったら1位はこれ だ!って最初からバレバレなので、ランキング発表の面白みが半減してしま うことを恐れての理由からです。


で、これがどれだけダントツの1位かというと、
下記のサンプルプログラム(単純に1000行×100列のセルに数字の1を表示 させる)の測定では、

 サンプル1が 154秒
 サンプル2が  11秒

という具合に、圧倒的な実に14倍の差が出ました。

ここまで目覚しい差がある以上、高速化といったらまずこの構文を使って 「画面更新の非表示」をやってみない手はありません。
これが、エクセルVBAを高速化させるための一番であることは疑う余地の ない事実です。特にシートに対しての読み書きの多いプログラムの場合には その効果は絶大です。


サンプル1
―――――――――――――――――――――――――+
    For i = 1 To 1000
        For j = 1 To 100
            Cells(i, j).Select
            ActiveCell.FormulaR1C1 = 1
        Next j
    Next i
―――――――――――――――――――――――――+


サンプル2
―――――――――――――――――――――――――+
    Application.ScreenUpdating = False
    For i = 1 To 1000
        For j = 1 To 100
            Cells(i, j).Select
            ActiveCell.FormulaR1C1 = 1
        Next j
    Next i
    Application.ScreenUpdating = True
―――――――――――――――――――――――――+


ですが、ちょっと待ってください!!

「画面更新の非表示」って、ほんとうにただ非表示にしてしまっていいんで しょうか?
非表示って、詰る所ユーザーには見せない!ってことに他なりません。
いくら高速化したいからといって、デベロッパーが勝手にユーザーには見え ないプログラムなんてものを作ってしまってもよいのでしょうか?


実は、当センターではこの問題をほんのちょっとしたテクニックを使うこと によって回避しています。
その内容は、次回この続きとして詳しくお話することにします。


 

----------【サンプルテストの実行環境】----------

   PCスペック:Pentium4 1.8GHz
   OS    :Windows XP
   Excel   :Microsoft Excel2003 or 2002

----------------- r(-●_●-) -----------------


次へ



 
▼エクセルVBA技術通信(メルマガ)の登録/解除はこちら((無料))
「エクセルVBA技術通信」 (まぐまぐマガジンID:0000252815)
メールマガジン登録
メールアドレス:
メールマガジン解除
メールアドレス:


 
サイトのご利用にあたって  |  エクセルVBA事例  |  会社概要  |  個人情報の取扱い  |  お問い合わせ


Copyright © 2007 WAT CO.,LTD.
※弊社の許可無く無断で複製・複写・転載することは固くお断りします。