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

投稿時間:2004/03/31(Wed) 18:09
投稿者名:きいちろう
URL :http://www.george24.com/~mascaras/
タイトル:
EXCELで列をinsertすると遅い
Win2000上でVB6からCreateObjectでExcel.Application(Excel2000)を作成、
ファイルをオープンし、シートに行を挿入すると極端に遅くなります。
同じことをエクセルマクロとして実行すると、
VBから実行したときより格段に早いです。

VBから実行させているときにタスクマネージャでCPU使用率を見ると、
CPUがぜんぜんビジーにならず、遊んでしまっている状態です。

処理は下記のようなものです。

Set objExcel=CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("abc.xls")
Set objSheet = objWorkbook.Worksheets("sheet1")
Set objRows=objSheet.Rows("1:1")
For i=0 to 1000
  objRows.Insert shift:=xlDown
Next

VBに詳しくないため、困ってしまっています。
アドバイスお願いいたします。

投稿時間:2004/03/31(Wed) 22:56
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: EXCELで列をinsertすると遅い
> 同じことをエクセルマクロとして実行すると、
> VBから実行したときより格段に早いです。
Excelが自分自身を操作するのと比べれば、外部(この場合はVB)からの操作に、
より高い実行コストがかかるのは、致し方無い所だと思いますよ。

ただ、コードの見直し等によって、速度向上が見込める場合はあります。

現在、VBから実行した場合と、Excelで実行した場合とで、それぞれ何秒程度の時間が
かかっていて、それをどの程度まで高速されたいのでしょうか?

例えば、今回のコードの、
> For i=0 to 1000
>   objRows.Insert shift:=xlDown
> Next
という所に注目してみると、1001回も挿入を繰り返すよりも、
   objSheet.Rows("1:1001").Insert Shift:=xlDown
のようにして、1回で1001行文の行挿入を行った方が高速に処理されます。

また、元のワークシートに数式が多数埋め込まれている場合には、
セルの自動計算機能をOffに設定しておくことで、セルの操作にかかる時間が
短縮されることがあります。