[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.