こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VBAの処理が遅くて困っています!

VBAの処理が遅くて困っています!



Excel VBAで1つのExcelファイルに3つのシートがあります。
1つ目のシートにデータが入力されています。
2つ目のシートには条件を入力できるようになっています。
 例えば車速と記入してあるセルには手入力で30と入力できるようになっています。

3つ目のシートは、1つ目のデータから2つ目の入力値と比較して
その条件にあう結果を3つ目のシートに計算結果として反映しています。

それが下記の処理です。
但し、処理が遅すぎて困っています。

下記式が20個ありB列の結果を元にまた次の計算をさせています。

誰か、教えて頂けませんでしょうか?
よろしく御願い致します。



Set J1Sheet = Worksheets("条件設定1")
Set K1Sheet = Worksheets("計算1")
Set DataSheet = Worksheets("データ")

 2つ目のシートの入力値を格納しています
 TMPCAT = J1Sheet.Cells(11, 4)
VSP下限 = J1Sheet.Cells(9, 4)

水温下限 = J1Sheet.Cells(13, 4)

ST1_下限Ne = J1Sheet.Cells(17, 4)
ST1_上限Ne = J1Sheet.Cells(15, 4)
ST1_下限TP = J1Sheet.Cells(21, 4)
ST1_上限TP = J1Sheet.Cells(19, 4)
ST1_上限QM = J1Sheet.Cells(23, 4)

ST1_許可ディレイ = J1Sheet.Cells(35, 4)
ST1_診断周期 = J1Sheet.Cells(37, 4)
ST1_診断回数 = J1Sheet.Cells(39, 4)
 
今回はデータ数が14000行ありました
 RowEnd = K1Sheet.Range("A65535").End(xlUp).Row

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

 Dim i As Long

  For i = 3 To RowEnd
'B列の計算:2
strAns = "●"
If K1Sheet.Cells(i - 1, 2) <> "●" Then
If DataSheet.Cells(i + 1, 10) < TMPCAT Then
strAns = ""
End If
End If
K1Sheet.Cells(i, 2) = strAns
Next i

投稿日時 - 2010-05-28 23:57:32

QNo.5929101

困ってます

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

Cドライブの空き容量が少ないとか、OSの劣化とかのオチでは無いでしょうね?
別のPCで試すとか、
データ退避してOS初期化して乗せ直せば驚くほど速くなったりして。。。

投稿日時 - 2010-05-29 03:48:27

ANo.1

回答ではありませんが。

何故でしょう、原因が判りません。
定番の
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
は入っている様なので、他に原因が思いつきません。

試しに、ほぼ同じコードを実行してみました。
EXCEL2003
CPU=Core2Duo P8400 2.26GHz
Memory=2GB
で、65500行程度で試しましたが、約3秒でした。
2年前のノートPCなので、そんなに早いPCではないのですが、
14000行だと1秒位です。

ちなみに、現状でどの程度掛かっていて、
K1Sheet.Cells(i, 2) = strAns
の行をコメントにするとどの程度早くなりますか?

投稿日時 - 2010-05-29 03:12:42

補足

現状で約2分程かかってしまっています。
今後もデータが増えるのでこれ以上遅くなってしまうと
非常に困ってしまいます。

K1Sheet.Cells(i, 2) = strAns
の行をコメントにしましたら、時間が半分になりました。

かなり早くなりました。

投稿日時 - 2010-05-29 23:17:30

あなたにオススメの質問