HOME > VBA高速化 > 【第1位】(続き)画面更新の半非表示

エクセルVBA高速化ランキング【第1位】(続き)


前回は、「エクセルVBA高速化ランキング第1位の発表」と題して 「画面更新の非表示」というものについて、とにかくこれはエクセルVBA の高速化にはダントツの効果があり、当方で実施したベンチマークの実測値でも 実に14倍の速さが出たという話をしましたが、

実は、この「画面更新の非表示」というものには一つ大きな問題があります。 今回は、その辺について話していきたいと思います。


画面更新の【半】非表示



その問題とは、前回の最後にも言いましたが、

「画面更新の非表示」って詰るところ、ユーザーに動作を見せない!という ことに他なりませんので、いくら高速化ができるからといって開発者が勝手 にユーザーに動作状況が見えないようなプログラムなんてものを作ってしま ってもいいのだろうか?という疑問です。

私たちの日常生活の中でも、

例えば、エレベータに乗るときにボタンを押したんだけど中々来ない。 「いまどの階にいるんだろう?当分来ないなら、どうせ3階までなんだから 階段使ったっていいんだよなぁーもぉ。イライラ!」

なんてこと、よくありますよね。

人間、待つ時間が予め分かってさえいれば、多少その時間が長かったとして も案外苦にならずに待てるものですが、 「あとどれくらい待てばいいのかが全くわからない。」 という場合には、ひどくイライラし、苦痛に感じてしまうものです。

なので最近では、歩行者用の信号でも青に変わるまでの残り時間がランプ表 示されるようなものや、バスなどでも、今どの辺まで来ているのかが分かる ような表示のある停留所というのを多く見うけるようになってきました。

前置きが長くなりましたが、そこできょうの本題ですが、 システムの場合においても、これとまったく同じことが言えるのではないか と思っています。

そこで、今日ご紹介する内容は、待ち時間にユーザーをイライラさせないた めのテクニックです。

それは一言でいうと、「一部分だけわざと見せる」という手法です。

これは、全てを非表示にするよりもスピードが遅くなることは当然ですし、 表示と非表示の切り替え自体にも時間は食いますのでスピードダウンにはな ります。
が、この手法を使うことで、全てを非表示にした場合に生じるユーザーの イライラ感や不安感といったものが格段に解消される効果があります。

正確には、「画面更新の非表示」+「一部分だけわざと見せる」ということ になります。

そこで、前回の「画面更新の非表示」を使ったサンプル2のプログラムを、 この+「一部分だけを見せる」という手法を使って書き直すと、次のように なります。


サンプル3
―――――――――――――――――――――――――+
    Application.ScreenUpdating = False
    For i = 1 To 1000
        Application.ScreenUpdating = False
        For j = 1 To 99
            Cells(i, j).Select
            ActiveCell.FormulaR1C1 = 1
        Next j
        Application.ScreenUpdating = True
        Cells(i, 100).Select
        ActiveCell.FormulaR1C1 = 1
    Next i
    Application.ScreenUpdating = True
―――――――――――――――――――――――――+
こうすると、処理速度の実測値は

 サンプル2が  11秒

だったのに対して

 サンプル3が  31秒

という結果です。


これだと、サンプル2よりは約3倍の時間が掛かるということになるわけな のですが、それでも前回のサンプル1に比べれば5倍以上速い速度が期待で きる結果となっています。

処理速度をまとめると、

 サンプル1は 154秒 ・・・[全表示]
 サンプル2は  11秒 ・・・[全非表示]
 サンプル3は  31秒 ・・・[一部分だけ表示]

です。


じゃぁ、どれが一番良いのか?については、まぁ、ケースbyケースでもあるわけですが

たとえば私の所では、エクセルで大量のデータを扱うようなシステム開発の 依頼のプレゼンなどをやる時には、この「画面更新の非表示」+「一部分だ けわざと見せる」という手法を活用したデモを行なうようにしています。

なぜなら、これだとデモを見てくれるクライアントのリアクションが全然 良くなりますので^^。(これはあくまでも私の経験則での話ですが。。)

ちなみに、サンプル3をもうひと工夫して下記サンプル4のようにすると、 より一層、見栄えはよくなりますので、ぜひご参考にしてみてください。


サンプル4
―――――――――――――――――――――――――+
    Application.ScreenUpdating = False
    For i = 1 To 1000
        Application.ScreenUpdating = True
        Cells(i, 1).Select
        ActiveCell.FormulaR1C1 = 1
        Application.ScreenUpdating = False
        For j = 2 To 100
            Cells(i, j).Select
            ActiveCell.FormulaR1C1 = 1
        Next j
    Next i
    Application.ScreenUpdating = True
―――――――――――――――――――――――――+
 サンプル4は  32秒・・・[最初の列の更新だけを見せる]

(サンプル3との違いは、見せる部分が最初か最後か、の違いです。)


今回はこれで終了です。


 

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

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

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



この記事は、「GoGo エクセルマクロをはじめよう!」を運営するWATエクセルカスタマイズセンターが実施した速度計測 ベンチマークテストによる結果を基にした高速化手法テクニックを順位付けして発表するものです。 (2007年発行の「エクセルVBA技術通信」のバックナンバー記事からの抜粋)




NEXT >>
CSVデータをエクセルシートへ取り込む際の高速化
【コラム】間違いだらけのマクロ高速化手順

目次へ戻る
 

 

 
最新号 は、下記にアドレス登録すると無料配信されます。

▼マクロ講座の登録はこちら((無料)) まぐまぐ
Go!Go! エクセルマクロをはじめよう! (マガジンID:0000135169)   
メルマガ登録
  メールアドレス:

ロジック編ランキング

  • プログラムのロジックを駆使したVBA高速化の王道テクニックを公開。 (現在準備中...)

 

読者数1万人達成しました!

エクセルで 最大級の
メールマガジン。
まぐまぐ殿堂入り

最新号は 今すぐ ↓↓↓ 登録

メールアドレス:

Powered by
まぐまぐ

完全まぐまぐ配信なので登録安心です!