[[20210517130307]] 『VBAで高速処理をしたい』(VBA勉強中) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで高速処理をしたい』(VBA勉強中)

よろしくお願いします。

今、VBAをゼロから勉強中でネットで検索してやっと完成したのですが、
処理がとても遅く困っています。

ファイルが2つありまして、1つは膨大なデータでもう1つはそれを集計
するためのファイルがあります。
両方、開いているのを条件に作ってみました。

Sub 計算()

    Dim wb1 As Workbook
    Dim wb2 As Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Set wb1 = Workbooks("データ.xlsm")
    Set wb2 = Workbooks("集計用.xlsm")
    Set ws1 = wb1.Worksheets("生産データ")
    Set ws2 = wb2.Worksheets("年間生産データ")

    Dim i As Integer
    Range("D27").Select
    i = 27
    Do Until Cells(i, 4).Value = ""
        Cells(i, 3) = WorksheetFunction.CountIfs(ws1.Range("B:B"), ">=" & ws2.Range("I23"), ws1.Range("P:P"), "1", _
                                                ws1.Range("B:B"), "<=" & ws2.Range("T24"), ws1.Range("P:P"), "1", _
                                                ws1.Range("F:F"), ws2.Cells(i, 4))
    On Error Resume Next
        Cells(i, 2) = WorksheetFunction.VLookup(Cells(i, 4), ws1.Range("F:G"), 2, False)

            If Err Then
        Cells(i, 2) = "データなし"
            End If
    On Error GoTo 0
    i = i + 1
    Loop

End Sub

集計用のファイルに、D列が空白になるまでB列とC列に計算していく
VBAなのですが、なぜ遅いのかわかりません。

どなたかよろしくお願いします。

< 使用 Excel:unknown、使用 OS:unknown >


 セルの数にもよりますが、セルへの書き込みを逐次実行すると、時間がかかる場合があります
 関数の計算時間も掛かりそうです。

 参考サイトです。
 http://officetanaka.net/excel/vba/speed/s11.htm
(´・ω・`) 2021/05/17(月) 13:25

(´・ω・`)さんありがとうございます。

> セルの数にもよります
今のところ1000行くらいです。

参考サイトありがとうございます。
動的配列を使えば早くなる可能性があるってことでしょうか?
(VBA勉強中) 2021/05/17(月) 15:32


 >動的配列を使えば早くなる可能性があるってことでしょうか?

 セルへの書き込みの回数を減らせば、速くなるかもしれません
 関数の再計算の数を減らすのもいいかも知れません。

 配列は、書き込みの回数を減らすための手段ですが、
「配列を使えばそれで速くなる」ともいいづらい...

 RangeのFormulaR1C1プロパティで式を一気に書き込んで、
 値貼り付けで、式を値に変換っていうのが早いような気がします。(未検証)
(´・ω・`) 2021/05/17(月) 15:38

 参考過去ログです。
[[20210402110826]] 『VBAで他のファイル参照 COUNTIF関数』
(´・ω・`) 2021/05/17(月) 16:27

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.