HOME > VBA高速化 >【第1位】 画面更新の非表示

エクセル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
―――――――――――――――――――――――――+


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

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


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



PS.

あと、止めるという意味ではもう一つ、 よく知られているのがセル参照系関数使ってるシートを処理する場合には よく起こりうる無駄な再計算の連発です。
私はセルの関数(長々した数式書くのは)好きでないので、 あまりこれは使いませんが、シートによく関数入れて使ってるタイプの人は、 先ほどの

―――――――――――――――――――――――――+
Application.ScreenUpdating = False
―――――――――――――――――――――――――+

この構文の後にでも、下記の

―――――――――――――――――――――――――+
Application.Calculation = xlCalculationManual
―――――――――――――――――――――――――+

再計算を手動でやる(すなわち、自動の再計算を止める)という構文を一つ入れておくと、 セルに入れた関数次第では劇的に早くなる可能性があります。


同様に、元への戻し方(止めた場合の再開方法)は、
―――――――――――――――――――――――――+
Application.Calculation = xlCalculationAutomatic
―――――――――――――――――――――――――+

となります。


けれど、やはり基本は、何処で何やっているか見えてこない、 都度バンバン再計算も起る数式(セルの関数)は、極力使わない (その処理もVBAコードに組み込んでやらせたほうがいい)というのが、 VBA知る人の肝要事ですね。


 

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

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

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



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




NEXT >>
画面更新の「半」非表示
【コラム】間違いだらけのマクロ高速化手順

目次へ戻る
 

 


初心者の皆さんへ

こんにちは、「Go!Go! エクセルマクロをはじめよう!」筆者の三太郎です。
私はこの道25年、現役バリバリのベテランSE(システムエンジニア)をしています。 なので、業界にどっぷり染まってしまった IT業界人 です。(笑)

マクロ(エクセルのプログラミング)がどれだけ便利なものなのか・・・ ということは、 皆さんもうよくお分かりいただけてる(!?)ものと思いますが、でも 「やっぱ、中々取っつき難い、ハードルが高い、素人には難しい。」 そう感じている方も多いかと思います。

エクセルをほぼ1日中使ってる人が多い職場であっても、マクロを使える人はほとんど居ません。 (30人の職場で精々1人か2人居ればいいほうかと思います。。) 私は、そのような現状(PC仕事の非効率)を改善して、日本にもっと効率良いIT化の機運を 高めて行きたい!そう願って、今から十数年前にこのようなメルマガ講座を始めました。

マクロを始める為の条件は、エクセル上級者ではありません! 頻繁にエクセルを使ってる人、 ただそれだけです。エクセルの操作レベルはまったく関係がありませんので、 エクセルユーザーの全ての皆さんが当メルマガ講座の参加対象者です。

パソコン仕事で この上なく便利なエクセルのマクロ というものを、もっと多くの人に知って欲しい、使って貰いたい。その想いだけで、長年メルマガの 無料配信を続けてきました。今では、この分野では異例とも言える1万人を超える大勢の皆さんに ご登録いただいているメルマガ講座に成長いたしました。 読者の皆さんからのご声援のお陰です。本当、ありがとうございます。

当メルマガ講座では、簡単に出来るマクロ作成法のコツとその手順を教えています。 とにかく作って、動かす。だから楽しくなってきます。 VBAのカタカナ用語や難しい仕組みの理解、構文暗記といった従来型の不必要な勉強は一切しません! なぜなら、エクセル作業の自動化にその必要は一切ないからです。 初心者がすぐに挫折するカタカナ用語羅列のマクロ勉強なんて、殆どの人には役に立ちません!

マクロとは、エクセルの作業を自動化する為の道具に過ぎません! マクロを組む為に難しいプログラムの仕組みや わけのわからないカタカナ専門用語を覚える必要など毛頭ないわけです。 私はこれまで十数年間、大勢の読者に教えてきて、Excel自動化に成功した沢山の人を生み出してきた 経験で、そう断言します! (本屋に並ぶVBA参考書のライターレベルの人の言うことを真に受けて、 あなたに必要のない”勉強の為の勉強”をしてしまわぬよう、 くれぐれもご注意ください!!

ここでは、「これからマクロを始めてみようかな?」と思ってる方や、 すでにどこかで勉強して「すぐに挫折してしまった・・(>_<)」という方に、 安心して勉強のできる方法とその実習環境とが用意されています。 もし、あなたが過去に挫折した経験者であれば、きっと私が常々言っている 勉強すべき事とすべきでない事 その違い(ここの初心者学習環境の素晴らしさ・・)というものがすぐに分かっていただけるだろうと思います。

マクロ(VBA)というのは多義に渡ります。アマチュアのサンデープログラマーから ベテランの上級者やプロに至るまで、実に幅が広いものです。 初心者には到底 必要のない 難しい部分まで勉強してしまうから当然、 必ずずぐに挫折する事になります。

残念ながら、「まだピカピカの小学一年生(初心者)に、いきなり掛け算や割り算はおろか、 三角関数や微分積分までも教えてしまうような痛ましい光景」を、ネットでも参考書でもセミナーでも、 VBAの世界ではたくさん目にします。

だから、「何を勉強するか」ではなく「何を勉強しないか」 初心者にはその正しい選択が重要なんです。勉強の範囲を 初心者の領域(Excel業務の効率化)だけに絞ってやりさえすれば 、さほど難しく考える必要はありません。それで、難しい、ちんぷんかんぷんだと思っていた マクロが、楽しく、 どんどん楽しく、勉強できるようになります。

→ エクセルマクロを10分で理解する!(YouTube動画)


あなたもこの三太郎式マクロ勉強法で、面倒なExcel仕事の自動化を ぜひ、この他にはない画期的な方法で実現してください。あなたの 参加を(下記無料メルマガへのご登録を)お待ちしてます!! (少々、力説し過ぎて話長くなりました。すみません。m(__)m)

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

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

ロジック編ランキング

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

 

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

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

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

メールアドレス:

Powered by
まぐまぐ

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


エクセルマクロの検定のページ