FC2ブログ
--年--月--日 (--) | Edit |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009年05月19日 (火) | Edit |
ほんのちょっとしたチューニング。
電脳速度の世界を求めるあなたへ。

http://officetanaka.net/excel/vba/speed/index.htm
上記の10か条は試したけれど、もうちょっと何とかしたい!って言う人のみ見てください。

実験したPCスペック
http://www-06.ibm.com/jp/pc/thinkpad/tpt60/tpt60s.shtml
インテル® Core™ Solo プロセッサ T1300(1.66GHz)搭載モデル
メモリ1.5G

では行ってみよー
※○○を使わないってばっかりだなー
1.空文字列の比較に Empty を使わない。
例:
× if str = Empty then
○ if str = "" then

よく、実質定数のほうが早いといいますが、Excel VBA に限って言えばそんなことはありません


2.文字列同士の比較に = を使わない。
例:
× if str = "" then
○ if str like "" then


なんでかは知りませんが、100万回ループさせた場合、1秒近くの差は出ました。


3.Iif 関数を使わない。
A では無い場合 B を代入とするとき、Iif 関数はとても便利ですが、恐ろしく遅いです。
例:
×
a = Iif( b <> "", b, c )


If b <> "" then
a = b
Else
a = c
End if

10倍遅いという記述を見ましたが、10倍どころじゃないです。


4.グローバル変数を使わない。
変数のスコープの問題です。
関数内の変数を見に行った後、関数外の変数を見に行くためです。
定数は別で大差は出ません。(理由は不明です???)
グローバルを関数内で沢山使う場合は、関数の頭で変数に代入してやると良いでしょう。
例:
Function fnc() as yyyyyyy
Dim d_code As xxxxxx
g_code = G_CODE




5.Instr 関数を使わない。
ある文字が入っているかどうかを調べるだけの場合、 Instr 関数を使わずに Like 比較演算子を使う。
例:
× If Instr( 1, aaa, "文字列", 1 ) > 0 Then
○ If aaa Like "*文字列*" Then

精密に調べる場合を除いて、これで事足ります。
速度的にも10倍近く変わってきます。


6.And や Or を使わない。
例:
×
If a = "aaa" Or a = "bbb" Then
Else
End if

If a = "aaa" then
Goto TRUES
Elseif a = "bbb" then
TRUES:
Else
End if

.NET にある AndAlso や OrElse を構文でやってしまおうっていうことです。
ただし、ラベルを多用するため、ラベルが被ってしまう可能性が高いので、要注意です。
スポンサーサイト
コメント
この記事へのコメント
コメントを投稿
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。