トップページ >
Excel >
VBA >
高速化テクニック >
セルの指定方法
セルの指定方法
セルを指定するにはいくつかの方法があります。一般的なのは
Rangeプロパティや
Cellsプロパティを使う手です。ここで「RangeとCellsはどっちが速いの?」という疑問もありますが、まぁ待ってください。実はもうひとつ
[A1]という書き方もあるのです。[A1].Value = 123と書けば、これはRange("A1").Value = 123やCells(1,1).Value = 123と同じことになり、セルA1を操作できるのです。あまり汎用性に優れた書き方ではありませんが、特定のセルをキメ打ちするときには便利です。
さて、[A1]方式、Cellsプロパティ、Rangeプロパティのそれぞれで速度を計測をしてみました。
| | [A1] | Cells | % |
| 1回目 | 00:29 | 00:28 | 96.6% |
| 2回目 | 00:28 | 00:28 | 100.0% |
| 3回目 | 00:31 | 00:26 | 83.9% |
| 4回目 | 00:32 | 00:27 | 84.4% |
| 5回目 | 00:26 | 00:26 | 100.0% |
| 6回目 | 00:28 | 00:27 | 96.4% |
| 7回目 | 00:30 | 00:27 | 90.0% |
| 8回目 | 00:31 | 00:26 | 83.9% |
| 9回目 | 00:30 | 00:27 | 90.0% |
| 10回目 | 00:30 | 00:26 | 86.7% |
| 平均 | 00:30 | 00:27 | 90.8% |
最初は
[A1]方式と
Cells方式を比べてみました。
下のコードのように、セルA1に乱数を入力した結果、若干ですがCells方式の方が速かったです。
Sub Test1()
Dim i As Long
For i = 1 To 1000
[A1] = Rnd
Next i
End Sub
Sub Test2()
Dim i As Long
For i = 1 To 1000
Cells(1,1) = Rnd
Next i
End Sub
次は
[A1]方式と
Rangeプロパティを比べてみます。結果は以下の通りです。
| | [A1] | Range | % |
| 1回目 | 00:29 | 00:27 | 93.1% |
| 2回目 | 00:28 | 00:27 | 96.4% |
| 3回目 | 00:31 | 00:28 | 90.3% |
| 4回目 | 00:32 | 00:28 | 87.5% |
| 5回目 | 00:26 | 00:27 | 103.8% |
| 6回目 | 00:28 | 00:28 | 100.0% |
| 7回目 | 00:30 | 00:27 | 90.0% |
| 8回目 | 00:31 | 00:28 | 90.3% |
| 9回目 | 00:30 | 00:27 | 90.0% |
| 10回目 | 00:30 | 00:28 | 93.3% |
| 平均 | 00:30 | 00:28 | 93.2% |
こちらも、Rangeプロパティの方がやや高速です。[A1]方式は簡便な記述方法であり、速度的に期待してはいけないのかもしれません。
Sub Test3()
Dim i As Long
For i = 1 To 1000
Range("A1") = Rnd
Next i
End Sub
では、よく使う
Cellsプロパティと
Rangeプロパティでは、どちらが速いのでしょうか。
上で使ったTest2(Cellsプロパティ)とTest3(Rangeプロパティ)を比較したのが下です。
| | Cells | Range | % |
| 1回目 | 00:28 | 00:27 | 96.4% |
| 2回目 | 00:28 | 00:27 | 96.4% |
| 3回目 | 00:26 | 00:28 | 107.7% |
| 4回目 | 00:27 | 00:28 | 103.7% |
| 5回目 | 00:26 | 00:27 | 103.8% |
| 6回目 | 00:27 | 00:28 | 103.7% |
| 7回目 | 00:27 | 00:27 | 100.0% |
| 8回目 | 00:26 | 00:28 | 107.7% |
| 9回目 | 00:27 | 00:27 | 100.0% |
| 10回目 | 00:26 | 00:28 | 107.7% |
| 平均 | 00:27 | 00:28 | 102.6% |
実は、Cellsプロパティの方がRangeプロパティより速かったんです。これは「名前で呼ぶな」でも書きましたが、Excelは本来オブジェクトをインデックス値で管理しているからです。考えてみれば、コンピュータですからその方が自然です。そこへ「○○という名前のオブジェクト」と指定すると、Excelは内部で名前(文字列)を数値に置き換えます。その処理がわずかながらも影響するのでしょう。
[関数も使え!]戻る← | →進む[セルを配列に入れる]