過去ログ

                                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
 ───────────────────────────────────────  ■題名 : まとめて表示すれば  ■名前 : ハマゾウ <hama@mb.town.yatsuo.toyama.jp>  ■日付 : 02/10/19(土) 1:47  ■Web : http://www.cty8.com/nsha3921/Home/index.htm  -------------------------------------------------------------------------
   ▼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でエラー発生  ■名前 : wooder <ueyama-es@ams.odn.ne.jp>  ■日付 : 02/10/19(土) 7:59  -------------------------------------------------------------------------
   ハマゾウさんありがとう御座います。
早速、試してみたのですが、
test_aの”Dim ClipData As DataObject”でコンパイルエラーが
発生しました。(test_bは実行できました)

>※Visual Basic Editorの参照設定で、Microsoft Forms 2.0 Object Libraryを
 チェックしてください

”Microsoft Forms 2.0 Object Library”が無かったため、チェックしていません。
これが、原因でしょうか?
 ───────────────────────────────────────  ■題名 : りんさんの方法のほうがスマートですね  ■名前 : ハマゾウ <hama@mb.town.yatsuo.toyama.jp>  ■日付 : 02/10/19(土) 11:59  ■Web : http://www.cty8.com/nsha3921/Home/index.htm  -------------------------------------------------------------------------
   ▼wooder さん、りんさん:
”Microsoft Forms 2.0 Object Library”はFM20.DLLを参照すればよいです。
ですが、りんさんの方法のほうがより速く処理できるようです。
りんさん、とても勉強になりました。
 ───────────────────────────────────────  ■題名 : Re:表示がおそい  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/10/19(土) 10:35  -------------------------------------------------------------------------
   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
 ───────────────────────────────────────  ■題名 : Re:表示がおそい  ■名前 : wooder <ueyama-es@ams.odn.ne.jp>  ■日付 : 02/10/19(土) 17:57  -------------------------------------------------------------------------
   ハマゾウさん、リソさんご指導ありがとう御座います。

 リソさんの方法で試してみると驚くほど表示が速くなりました。
質問の仕方がわかりくいかと、心配していましたが理解していただけて
またまた、驚いています。
 自分の知識が未熟だと改めて実感しました。

これからも、お世話になると思いますのでよろしくお願いします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 228