投稿者 魔界の仮面弁士  (社会人) 投稿日時 2012/5/14 16:48:14
> 教えていただいた内容をもとに作成してみます。

Excel には、『ワークシート関数』『マクロ』『オートメーション』『DDE』など、
複数の操作手法が用意されているため、目的に応じて使い分けてみてください。


以下蛇足。

> やはりグルグル回す方式では読み込みは遅いようですね。

これは VB.NET の問題ではなく、Excel 側と VB 側での“通信回数”の問題ですね。

たとえば、ワークシート上の 10x10 のセル範囲(100個)があったとして、
「それらの内容を一度に持ってきて、VB側で書き換えて一度に返す方法」と、
「個々のセルごとに、合計 100 回の参照と 100 回の書き込みを行う方法」とを比べると、
どうしても後者の方が遅くなります。

これは、VB6 や VB.NET などといった「外部」との通信がボトルネックになるためであり、
処理回数が増えるにつれて目に見えて遅くなってしまいます。

# ちなみに、もしこれが Excel VBA であった場合は、「自分自身」に対する操作なので、
# ループ処理で記述したとしても、速度低下は VB よりは比較的少なくて済みます。
# もちろんVBA であったとしても、一括処理した方が高速にはなりますけれどね。


この手の問題は、「Excel VBA」と「Excel マクロ」を比較した場合にも発生します。

たとえば、VBAの「PageSetup オブジェクト」および、マクロの「PAGE.SETUP コマンド」は、
いずれも印刷設定のためのコマンドであり、用紙サイズ/拡大率/左余白/右余白などを
指示するためのものです。

これらの調整には、プリンタードライバーとのやりとりを必要とするため、
項目数(書き換えたプロパティの数)だけ、再計算のための僅かな時間を必要とします。

たとえば、一つの項目に 0.4 秒の時間がかかる場合、PageSetup オブジェクトのプロパティを
10項目操作したとしたら、約 4 秒の待ち時間になる計算です。
(速度はドライバー依存であり、異なるメーカーのプリンターにすると処理速度も変化します)

これが PAGE.SETUP マクロであれば、複数の項目を一度にセットできるため、
通信回数も一回分だけで済みます。待ち時間は 0.4 秒だけで済む計算ですね。
http://www.keep-on.com/excelyou/2001lng4/200110/01100290.txt
http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200811/08110137.txt
http://www.microsoft.com/en-us/download/details.aspx?id=9253