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