【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.
  • 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
  • お客様にとって本当に良いことかを第一に考える人
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次