[リストへもどる]
一括表示

投稿時間:2002/11/05(Tue) 16:33
投稿者名:半人前
Eメール:
URL :
タイトル:
処理が遅すぎる。
ただいま、VBで作った配列にCSVのファイルを格納して計算するというコードを作っています。
計算式もできコードもできたのですが、問題が発生しました。
それは答えを出す処理にものすごく時間がかかるのです。
プログラムの動きは、Excelで指定したファイルを開いてRange("A1")にある値からVBに格納した配列を用いて計算、答えをRange("B1")にいれるという動きです。

一度VBに答えを表示させたときは、あまり気にするほどの処理の重さじゃなかったのですが、
Excelに答えを表示させようとしたらものすごく処理に時間がかかります。
なぜこのような現象が起きるのでしょうか?

投稿時間:2002/11/05(Tue) 19:59
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 処理が遅すぎる。
> 一度VBに答えを表示させたときは、あまり気にするほどの処理の重さじゃなかったのですが、
> Excelに答えを表示させようとしたらものすごく処理に時間がかかります。
> なぜこのような現象が起きるのでしょうか?

Excelを使用すれば当然、Excelが立ち上るまでに時間がかかります。これはExcelを単独で
使用しても同じです。だが、2回目からは立ち上げるのが少し早くなります。
気になるなら、他の方法をとって下さい。

投稿時間:2002/11/06(Wed) 10:08
投稿者名:半人前
Eメール:
URL :
タイトル:
Re^2: 処理が遅すぎる。
返信ありがとうございます。
立ち上がるまでの時間はわかるのですが、立ち上げてから一つの計算を求めるのにものすごく、
時間がかかります。(約5分)

'1位の数を数える
    For i = 1 To 10000 - 1
        
        If DataTable(7, i) Like Range("A1").Value And DataTable(6, i) = "1" Then
            cnt = cnt + 1
        End If
    Next i
このようなコードなのですが、これだけで答えがでるまで5分くらいかかります。

上のようなコードが他に248個あります。
コードは長いですが、以前は1分30秒くらいですべて表示されました。
急に処理が重くなることはあるのでしょうか?

投稿時間:2002/11/06(Wed) 10:31
投稿者名:A221
Eメール:
URL :
タイトル:
Re^3: 処理が遅すぎる。
>If DataTable(7, i) Like Range("A1").Value And DataTable(6, i) = "1" Then
このような場合、Range("A1").Valueを見に行く回数分エクセルオブジェクトへの
参照になります。
キャッシュしたほうがよいと思います。

Dim tmpRange As String
tmpRange=Range("A1").Value
If DataTable(7, i) Like tmprange And DataTable(6, i) = "1" Then

#また、別の掲示板でお答えしましたが、「Range("A1").Value」ではなく、
#明示的にxlSheet.Range("A1").Valueで記述したほうがよいでしょう。
#xlSheet.Cells(1,1).Valueでも可です。

投稿時間:2002/11/06(Wed) 13:12
投稿者名:半人前
Eメール:
URL :
タイトル:
Re^4: 処理が遅すぎる。
A221様>本当にありがとうございます。
なんとかこの問題はクリアすることができました。
今は指定したシートのみをCSVで保存しようと悪戦苦闘しています。

Worksheets(txtName.Text).SaveAs "C:\WINDOWS\デスクトップ\" & txtName.Text & ".csv"

とコードを書いたのですが、他のシートも保存されてしまいます。
ちゃんとCSVで保存されてないのですかねぇ(--;

投稿時間:2002/11/06(Wed) 13:48
投稿者名:A221
Eメール:
URL :
タイトル:
Re^5: 処理が遅すぎる。
> Worksheets(txtName.Text).SaveAs "C:\WINDOWS\デスクトップ\" & txtName.Text & ".csv"
「Worksheets(txtName.Text)」の部分もXlappや、Xlbookから参照したほうがよいでしょう。

Dim tmpname As String
Dim fpath As String

fpath = "c:\"
tmpname = Text1.Text

xlbook.Worksheets(tmpname).SaveAs _
    FileName:=fpath & tmpname & ".csv", FileFormat:=xlCSV

これで保存できました。