VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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 エラーが出力されます。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -