【VBA】処理速度が速いシートの指定方法

こんにちは!大阪市を拠点に活動している『縁紡ぐ』の稲垣です。
SWELLを使ったホームページ制作や、Excel、ACCESS、RPAなどのシステム開発を行っています。
また、Excel、Word、Outlookの研修や、情報セキュリティ研修も行っています。身近なITの相談相手になりたいと思っています。
お気軽にお問い合わせください。
目次
【VBA】処理速度が速いシートの指定方法を検証
ExcelでVBAを処理するときに問題によくなるのが、速度です。ワークシートの指定方法によって速度に差がでるかを検証してみました。
検証内容は、次の3つです。
検証方法
1.シート名でシートを指定して使う
2.変数に代入してシートを使う
3.オブジェクト名でシートを指定して使う
結論
まずは、検証結果からお伝えします。
検証結果
・『1.シート名でシートを指定して使う』が1番時間がかかる(遅い)
・『2.変数に代入してシートを使う』が2番目に早い
・『3.オブジェクト名でシートを指定して使う』が1番はやい
検証
検証法は、100万行を別のシートに転記するというシンプルな方法です。
それぞれの検証用コードと結果はこちらです。
1.シート名でシートを指定して使う
VBAを覚えたころの、オーソドックスな方法です。
Sub speedtest1()
タイマー.測定開始
'変数を使わずシートを指定
Dim i As Long
For i = 1 To 1000000
Worksheets("転記先").Cells(i, 1) = Worksheets("元データ").Cells(i, 1)
Next i
タイマー.測定終了
MsgBox タイマー.処理時間を文字列で取得
End Sub

結果は、28秒かかりました。
2.変数に代入してシートを使う
このパターンで書かれているコードは、よく見ます。一番早いのでしょうか?
Sub speedtest2()
タイマー.測定開始
'ws変数に代入して利用
Dim ws As Worksheet
Set ws = Worksheets("元データ")
Dim ws2 As Worksheet
Set ws2 = Worksheets("転記先")
Dim i As Long
For i = 1 To 1000000
ws2.Cells(i, 1) = ws.Cells(i, 1)
Next i
タイマー.測定終了
MsgBox タイマー.処理時間を文字列で取得
End Sub

測定結果は、ほぼ19秒で『1.シート名でシートを指定して使う』の2/3程度の時間で処理が終了しました!
オブジェクト名でシートを指定して使う
オブジェクト名を指定して使う方法を私はよく使っていますが、速度はどうでしょうか?
Sub speedtest3()
タイマー.測定開始
Dim i As Long
For i = 1 To 1000000
tenki.Cells(i, 1) = moto.Cells(i, 1)
Next i
タイマー.測定終了
MsgBox タイマー.処理時間を文字列で取得
End Sub

1番早い時間で処理が終了しました。
測定結果
パターン | 測定結果 |
---|---|
1.シート名でシートを指定して使う | 28.0秒 |
2.変数に代入してシートを使う | 18.9秒 |
3.オブジェクト名でシートを指定して使う | 14.7秒 |
記事を書いた人

稲垣
- Excel、ACCESSでのシステム開発が得意
- ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
- 自家焙煎するほどのコーヒー好き
- 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
- 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント