マクロの実行速度を上げる(Microsoft Word)
マクロが正しく実行されると、私たちの生活が楽になります。 (正しく実行されていない場合、人生は絶対に簡単ではありません。)多くの作業を行うマクロがある場合は、それをより速く実行することに興味があるかもしれません。
もちろん、最初に行うタスクは、マクロを調べて、アルゴリズム(実行することを決定した方法)が可能な限り効率的であるかどうかを確認することです。満足したら、同じ行に複数のステートメントを配置するだけで、マクロを高速化することもできます。次の単純なマクロについて考えてみます。これは、ドキュメント内で以前に発生したものを検出します。
Sub PrevFind() With Selection.Find .ClearFormatting .Forward = False .Wrap = wdFindAsk .Execute End With End Sub
このマクロは非常に単純です。マクロを保存すると、マクロに含まれるステートメントは、VBAでより効率的に実行できる3バイトのトークンに解析されます。 (トークンは表示されません。トークンに相当するマクロ言語のみが表示されます。)マクロの実行中、VBAコマンドプロセッサは一度に1行を取得し、その行のすべてのトークンを実行します。したがって、前述のように、プロセッサによって個別にフェッチおよび実行される8行があります。
ここで、同じマクロの次のバージョンについて考えてみます。
Sub PrevFind() With Selection.Find .ClearFormatting: .Forward = False: .Wrap = wdFindAsk: .Execute End With: End Sub
このバージョンは、個々の行が連結されてコロンで区切られているため、はるかに短いように見えます。これにより、マクロの可読性は低下しますが、実行速度は向上します。どうして?
VBAコマンドプロセッサは、処理するために一度に1行ずつ取得するためです。この例では、取得する行は4行だけです。 「取得時間」が少ないということは、実行が速いことを意味します。以前は4行を占めていた、このマクロの3行目は、1行として処理されるようになりました。
同じ行に複数のステートメントを配置すると、マクロの可読性が低下します。ただし、ニーズによっては、これは、達成できる速度の向上との公正なトレードオフになる可能性があります。自分のマクロでこの手法を試して、自分にとって意味があるかどうかを確認する必要があります。
注:
このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。
(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(1640)は、Microsoft Word 97、2000、2002、および2003に適用されます。