- 締切済み
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
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ngwave
- ベストアンサー率27% (23/84)
Cドライブの空き容量が少ないとか、OSの劣化とかのオチでは無いでしょうね? 別のPCで試すとか、 データ退避してOS初期化して乗せ直せば驚くほど速くなったりして。。。
- samz_
- ベストアンサー率91% (11/12)
回答ではありませんが。 何故でしょう、原因が判りません。 定番の 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 の行をコメントにするとどの程度早くなりますか?
補足
現状で約2分程かかってしまっています。 今後もデータが増えるのでこれ以上遅くなってしまうと 非常に困ってしまいます。 K1Sheet.Cells(i, 2) = strAns の行をコメントにしましたら、時間が半分になりました。 かなり早くなりました。