Page 228 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼表示がおそい wooder 02/10/18(金) 17:53 ┣まとめて表示すれば ハマゾウ 02/10/19(土) 1:47 ┃ ┗test_aでエラー発生 wooder 02/10/19(土) 7:59 ┃ ┗りんさんの方法のほうがスマートですね ハマゾウ 02/10/19(土) 11:59 ┗Re:表示がおそい りん 02/10/19(土) 10:35 ┗Re:表示がおそい wooder 02/10/19(土) 17:57 ─────────────────────────────────────── ■題名 : 表示がおそい ■名前 : wooder <ueyama-es@ams.odn.ne.jp> ■日付 : 02/10/18(金) 17:53 -------------------------------------------------------------------------
計画ファイルに実績を入力しその値を取得し表示させる コードを作成したのですが、セルに変数の値を代入する際、 処理が遅くなります。 下記のコード記述だと処理が遅くなるのでしょうか? ご指導お願いします。 m = 0 For H = 1 To 4 J = 0 For I = 1 To 2 For K = 1 To DATA_COUNT(I, H) Cells(5 + J + m, 3) = KISYU(I, H, K) Cells(5 + J + m, 4) = KEIKAKU(I, H, K) Cells(5 + J + m, 5) = KEIRUI(I, H, K) Cells(5 + J + m, 6) = JITUSEKI(I, H, K) Cells(5 + J + m, 7) = JITURUI(I, H, K) Cells(5 + J + m, 9) = KOUTEI(I, H, K) Cells(5 + J + m, 10) = LOT(I, H, K) J = J + 1 Next K Next I m = m + 25 Next H |
▼wooder さん: データを個々に表示させているので処理が遅くなっているのではないでしょうか? クリップボード経由でデータをまとめて表示すれば速く処理できます。 たとえば、以下のコード"testA"と"testB"では同じ結果が出力されますが、"testA"のほうがより速く処理できます。 ※Visual Basic Editorの参照設定で、Microsoft Forms 2.0 Object Libraryをチェックしてください。 Sub testA() Dim i As Integer Dim j As Integer Dim Data As String Dim ClipData As DataObject Dim time As Date time = Now() ActiveSheet.Cells.Clear For i = 1 To 100 For j = 1 To 100 Data = Data & Format(i * j, "0") & Chr(9) Next j Data = Data & Chr(10) Next i Set ClipData = New DataObject ClipData.SetText Data ClipData.PutInClipboard ActiveSheet.Paste Destination:=ActiveSheet.Cells(1, 1) MsgBox "計算時間=" & Format(Now() - time, "hh:mm:ss") End Sub Sub testB() Dim i As Integer Dim j As Integer Dim time As Date time = Now() ActiveSheet.Cells.Clear For i = 1 To 100 For j = 1 To 100 ActiveSheet.Cells(i, j) = i * j Next j Next i MsgBox "計算時間=" & Format(Now() - time, "hh:mm:ss") End Sub |
ハマゾウさんありがとう御座います。 早速、試してみたのですが、 test_aの”Dim ClipData As DataObject”でコンパイルエラーが 発生しました。(test_bは実行できました) >※Visual Basic Editorの参照設定で、Microsoft Forms 2.0 Object Libraryを チェックしてください ”Microsoft Forms 2.0 Object Library”が無かったため、チェックしていません。 これが、原因でしょうか? |
▼wooder さん、りんさん: ”Microsoft Forms 2.0 Object Library”はFM20.DLLを参照すればよいです。 ですが、りんさんの方法のほうがより速く処理できるようです。 りんさん、とても勉強になりました。 |
wooder さん、ハマゾウさん、おはようございます。 > 計画ファイルに実績を入力しその値を取得し表示させる >コードを作成したのですが、セルに変数の値を代入する際、 >処理が遅くなります。 配列に入れてから、値をまとめてセルに渡すと速くなります。 For H = 1 To 4 J = 0 'I=1,2をまとめて配列に格納 ReDim Rdat(1 To DATA_COUNT(1, H) + DATA_COUNT(2, H), 3 To 10) As Variant For I = 1 To 2 For K = 1 To DATA_COUNT(I, H) J = J + 1 'Count Up Rdat(J, 3) = KISYU(I, H, K) Rdat(J, 4) = KEIKAKU(I, H, K) Rdat(J, 5) = KEIRUI(I, H, K) Rdat(J, 6) = JITUSEKI(I, H, K) Rdat(J, 7) = JITURUI(I, H, K) Rdat(J, 9) = KOUTEI(I, H, K) Rdat(J, 10) = LOT(I, H, K) Next K Next I ' M = (H - 1) * 25 With ActiveSheet .Range(.Cells(5 + M, 3), .Cells(4 + M + J, 10)).Value = Rdat() End With Next H V3のログですが、こちらもお試しください。 http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=ntr;tree=7715;no=7734;id=Excel |
ハマゾウさん、リソさんご指導ありがとう御座います。 リソさんの方法で試してみると驚くほど表示が速くなりました。 質問の仕方がわかりくいかと、心配していましたが理解していただけて またまた、驚いています。 自分の知識が未熟だと改めて実感しました。 これからも、お世話になると思いますのでよろしくお願いします。 |