Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13136 / 13646 ツリー ←次へ | 前へ→

【6845】Excel出力の高速化について ume 03/8/7(木) 10:01 質問
【6847】Re:Excel出力の高速化について ichinose 03/8/7(木) 11:58 回答
【6852】Re:Excel出力の高速化について ume 03/8/7(木) 22:38 お礼

【6845】Excel出力の高速化について
質問  ume  - 03/8/7(木) 10:01 -

引用なし
パスワード
   Excelに出力するときに下のようなプログラムを
使っているのですが、

  Set ObjExcel = New Excel.Application
  Set WkBook = ObjExcel.Workbooks.Open(strFileName)
  Set WkSheet = WkBook.Worksheets(1)

  ObjExcel.ScreenUpdating = False

  WkSheet.Cells(intRow1, intCol1) = strTemp1
  WkSheet.Cells(intRow2, intCol2) = strTemp2             
  ・
  ・
  ・
  ・ 
  ObjExcel.ScreenUpdating = True

  この出力の方法だとかなりの時間がかかってしまいます。
  出力処理を高速化したいのどのようにしたらよいでしょうか。
  出力したいデータは1レコードの列数が50で20レコード程度です。
  Excelには1レコードを3行(列数が15程度)で表示しています。
  よい出力方法がありましたら教えてください。よろしくお願いします。

【6847】Re:Excel出力の高速化について
回答  ichinose  - 03/8/7(木) 11:58 -

引用なし
パスワード
   ▼ume さん:
こんにちは。
>Excelに出力するときに下のようなプログラムを
>使っているのですが、
>
>  Set ObjExcel = New Excel.Application
>  Set WkBook = ObjExcel.Workbooks.Open(strFileName)
>  Set WkSheet = WkBook.Worksheets(1)
>
>  ObjExcel.ScreenUpdating = False
>
>  WkSheet.Cells(intRow1, intCol1) = strTemp1
>  WkSheet.Cells(intRow2, intCol2) = strTemp2             
>  ・
>  ・
>  ・
>  ・ 
>  ObjExcel.ScreenUpdating = True
>
>  この出力の方法だとかなりの時間がかかってしまいます。
>  出力処理を高速化したいのどのようにしたらよいでしょうか。
>  出力したいデータは1レコードの列数が50で20レコード程度です。
>  Excelには1レコードを3行(列数が15程度)で表示しています。
>  よい出力方法がありましたら教えてください。よろしくお願いします。
値を配列変数に設定してからセルに代入すると速そうですよ。
'============================================================
Sub main()
  Dim sample() As Variant
  sample() = mk_sample()
  Range(Cells(1, 1), Cells(20, 50)).Value = sample()
End Sub

'======================================================================
Function mk_sample() As Variant
'↓のコードで配列に値をサンプルデータとして設定していますが、
'  この変数同士の移行のループは結構速いです
  Dim myarray(1 To 20, 1 To 50) As Variant
  For idx = 1 To 20
    For jdx = 1 To 50
     myarray(idx, jdx) = 2 * idx + jdx
     Next
   Next
  mk_sample = myarray()
End Function

一例です。

【6852】Re:Excel出力の高速化について
お礼  ume  - 03/8/7(木) 22:38 -

引用なし
パスワード
   ありがとうございます。
ichinoseさんの言われた方法で
やってみます。
またご教授のほどよろしくお願いします。

13136 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free