Excel/VBA:MidとMid$とで速度対決!
文字列の一部を抜き取るVBA関数のMidですが、Mid$というものもあります。
機能的には全く同じなのですが、$が付いていない方はバリアント型の値を返し、$付きは文字列型の値を返します。この差が速度にどれくらい効くのか検証してみました。
[ad#top-1]
検証したプログラム
以下のプログラムを作って速度検証しました。
Sub MidSpeedTest()
t1 = Timer()
s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
For i = 0 To 10000000
'↓ここをMidとMid$に切り替えて速度比較
result = Mid(s, 5, 3)
Next i
t2 = Timer()
Range("A1") = t2 - t1 'A1セルに速度の結果
End Sub
result = Mid(s, 5, 3) の1行だけだと一瞬で終わるので、10000000回ループしました。
結果
以下が結果です。単位は秒。
| – | Mid | Mid$ |
|---|---|---|
| 1 | 3.46 | 3.23 |
| 2 | 3.42 | 3.23 |
| 3 | 3.45 | 3.29 |
| 4 | 3.48 | 3.22 |
| 5 | 3.45 | 3.22 |
| 6 | 3.44 | 3.22 |
| 7 | 3.43 | 3.21 |
| 8 | 3.45 | 3.22 |
| 9 | 3.47 | 3.22 |
| 10 | 3.42 | 3.22 |
| 平均値 | 3.45 | 3.23 |
Mid関数を使うと平均3.45秒、一方でMid$関数だと3.23秒と、わずかながらMid$の方が速い結果となりました。約7%ほど速かったことになります。
$付き関数はMidのほかにも、Left, Right,などがあります。
簡単なプログラムだと大したことありませんが、Mid関数を多用する場合やループの中に置く場合は、Mid$を使った方が良さそうです。
[ad#ad-1]
スポンサーリンク