簡単に言えば、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の方が速いわけです。
もっとも、冒頭にも書きましたが、両者は速度差で決めるべきではありません。可読性やメンテナンス性を考慮して、使うべき場面で使うべき方を選んでください。