非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

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]

スポンサーリンク

 - Excel, VBA