名前で呼ぶな


シートを特定するとき
Sheets(1)
Sheets("Sheet1")
という2通りの書き方ができます。このとき、Sheets("Sheet1") と名前を指定するよりも、インデックス値を使って Sheets(1) の方が速いですよ、という話です。確かに昔はそうでした。現在ではどうでしょう。次のコードで試してみます。

Sub Test1()
    Dim i As Long, A As String
    For i = 1 To 1000
        Sheets(1).Name = Sheets(1).Name
    Next i
End Sub
Sub Test2()
    Dim i As Long, A As String
    For i = 1 To 1000
        Sheets("Sheet1").Name = Sheets("Sheet1").Name
    Next i
End Sub
Index Name %
1 2.937 2.954 100.6%
2 2.828 3.234 114.4%
3 2.844 2.859 100.5%
4 2.844 2.860 100.6%
5 2.844 2.985 105.0%
6 2.906 3.437 118.3%
7 3.312 3.156 95.3%
8 3.047 3.250 106.7%
9 3.000 3.703 123.4%
10 3.219 6.406 199.0%
平均 2.978 3.484 117.0%

うむ、確かにちょこっとだけ速いですけど、気にするような違いではありませんね。そもそも Sheets(i) のようにインデックスでシートを指定するときは、そうすべき理由があるからです。だったら、よしんば遅くたってしかたないです。両者の違いは、単純に速度差だけで決められることではありませんね。