機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA > 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:2900:2896.6%
2回目00:2800:28100.0%
3回目00:3100:2683.9%
4回目00:3200:2784.4%
5回目00:2600:26100.0%
6回目00:2800:2796.4%
7回目00:3000:2790.0%
8回目00:3100:2683.9%
9回目00:3000:2790.0%
10回目00:3000:2686.7%
平均00:3000:2790.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:2900:2793.1%
2回目00:2800:2796.4%
3回目00:3100:2890.3%
4回目00:3200:2887.5%
5回目00:2600:27103.8%
6回目00:2800:28100.0%
7回目00:3000:2790.0%
8回目00:3100:2890.3%
9回目00:3000:2790.0%
10回目00:3000:2893.3%
平均00:3000:2893.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プロパティ)を比較したのが下です。

 CellsRange%
1回目00:2800:2796.4%
2回目00:2800:2796.4%
3回目00:2600:28107.7%
4回目00:2700:28103.7%
5回目00:2600:27103.8%
6回目00:2700:28103.7%
7回目00:2700:27100.0%
8回目00:2600:28107.7%
9回目00:2700:27100.0%
10回目00:2600:28107.7%
平均00:2700:28102.6%
実は、Cellsプロパティの方がRangeプロパティより速かったんです。これは「名前で呼ぶな」でも書きましたが、Excelは本来オブジェクトをインデックス値で管理しているからです。考えてみれば、コンピュータですからその方が自然です。そこへ「○○という名前のオブジェクト」と指定すると、Excelは内部で名前(文字列)を数値に置き換えます。その処理がわずかながらも影響するのでしょう。



このエントリーをはてなブックマークに追加