投稿日 | : 2002/12/19(Thu) 12:07 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re^5: Excelがタスクに残る現象について |
元のコードのように、
〜.Cells(〜).Value = 〜
で繰り返し出力した場合は、毎回、Excelとの通信が発生する事になるため、
処理的にも遅くなりますし、ハングアップの原因ともなります。
> ただ、サンプルを見ていると、そのままコピーし、セル指定
> なく貼りつけるだけですので、簡単なコードで書けるのですが、
たとえば、複数のセル範囲 B10:D30 に対してデータを格納する場合、
Set objRange = objSheet.Range("B10:D30")
varRange = objRange.Value
のようにします。
この時、varRangeには、(1, 1)〜(21, 3) なVariant型の2次元配列が格納されます。
そして、この2次元配列の各位置に、csvから読み込んだデータを格納していき、最後に
objRange.Value = varRange
としてみてください。(元となる配列は、ReDimで作成してもOKです)
配列を一括代入した場合は、Excelとの通信はその1回分しか発生しませんので、
Cells(〜).Valueを繰り返すよりも、パフォーマンスが良くなります。
なお、配列ではなく、単一の値を代入した場合は、それらの各セルに、
同一の値が格納される事になります。また、1次元配列を代入した場合は、
それが列方向に繰り返されて出力されます。
それと、配列のサイズとセル範囲が一致していなかった場合は、以下のように動作します。
・配列の方が大きい場合は、余分な範囲のデータは無視されます(Excelには出力されません)。
・配列の方が小さい場合は、不足しているセルに #N/A エラーが出力されます。