セルの指定方法


簡単に言えば、RangeとCellsって、どっちが速いの?ってことです。でも、結論から先に書きますけど、どちらを使うかは速度差で決めることじゃなく、必然性がすべてです。Rangeを使うべき場面だったら、たとえ多少遅くたってRangeを使うべきだし、Cellsを使うべきケースだったら迷わずにCellsを使うべきです。まぁ、一応検証はしてみましょう。

単純にRangeとCellsの違いだけを検証するのって難しいです。ここでは(意味ないですけど)次のコードでやってみます。

Sub Test1()
    Dim i As Long, A As Long
    For i = 1 To 50000
        A = Range("A1") + Range("B1") + Range("C1")
    Next i
End Sub
Sub Test2()
    Dim i As Long, A As Long
    For i = 1 To 50000
        A = Cells(1, 1) + Cells(1, 2) + Cells(1, 3)
    Next i
End Sub
Range Cells %
1 0.765 0.485 63.4%
2 0.765 0.469 61.3%
3 0.750 0.485 64.7%
4 0.766 0.500 65.3%
5 0.781 0.578 74.0%
6 0.812 0.484 59.6%
7 0.766 0.516 67.4%
8 0.781 0.500 64.0%
9 0.766 0.484 63.2%
10 0.766 0.516 67.4%
平均 0.772 0.502 65.0%

Cellsの方が速いですね。これは昔からです。いわゆるセルのアドレス"A1"とか"B4"などというのは、セルに最初から設定されている名前です。ですから、もしセルに"合計"という名前を設定しているのなら、Range("合計")で操作できます。一方でExcelは、全セルをメモリ内では二次元配列として管理しています。二次元配列なのですから、Cells(3, 4)のような指定の方が扱い安いです。もし、Range("B4")のように指定すると、Excelは「この"B4"という名前のセルは、何行目の何列目にあるんだ?」というのを調べます。もちろん、そこで膨大な時間がかかるほどExcelはマヌケじゃありません。それでも十分に高速ですけど、調べなくて済む分だけ、Cellsの方が速いわけです。

もっとも、冒頭にも書きましたが、両者は速度差で決めるべきではありません。可読性やメンテナンス性を考慮して、使うべき場面で使うべき方を選んでください。