忍者ブログ

Excelに高速っぽくVBAとかOLEとかでデータを入れる

rubyってすばらしいです。何がすばらしいかは相対論なのでさておくとして、とあるデータをほげほげっとするとしてたときにrubyとかperlとか、まあなんかそのあたりのものを使えると楽です。CだとかC++だとかJavaだとかまあなんでもいいんですがそっち系統のものだと割りに面倒なことが楽チンにできたりするのですね。そんなに変わらない処理もあったりしますが。

で、まあさておいて、VBAとかはVB6時代のものがベースだったりして(VBSも)、BASICとしてみても気持ち悪いし、まじめな言語としても微妙です。いや、そんなに悪くはないですが。
標準のデータ構造が微妙で、Collectionのお世話になりっぱなしなVBAは捨てて、結局VBAもOLEでごりごりやるのと変わらないので特別な場合は別にして外部で好きな言語でやってもいいと思うんですね。やらなくてもいいんですが。


という前置きはいいとしてExcelにデータを追加するときに
ScreenUpdating = false
というのはよくやりますが、データをセルに入れていくところがこれまた遅いので高速にしたいわけです。
外部のあれでやるならCSVにでもして読み込めいわれそうですが(間違いなく高速ですし環境にも依存しないすばらしい方策です)、16進数だったりする文字列を文字列として扱いたいときはこまりものです。あの子は勝手に数値データとして扱ってくれたり浮動小数点数として扱ってくれたりします。

そんなときには
cells.Style.NumberFormat = "@"
とでもしてやったセルにデータを入れるしかありません。
一個一個データを入れるのが筋かもしれませんがそうすると遅くて泣きそうになるのでセルを選択してデータを配列で渡します。

sheet.Range(省略).Select
Selection.Value = 配列

配列データが一次元だと一行のデータを入れることになりますが、二次元配列にして複数行を選択すれば一気に複数レコードのデータを投げることもできるようです(Excel 2003で確認)。

はぁ。なんでみんなExcel好きなんですかね? なぞの挙動が多くて安心して使えないんですが。

PR

2008/01/27 Programming Comment(0)

COMMENT

COMMENT FORM

NAME
MAIL
WEB
TITLE
COMMENT
PASSWORD

カテゴリー
 
 
 
最新記事
 
(03/28)
(05/31)
(03/21)
(03/19)
(12/26)
 
 
ブログ内検索
 
 
 
カレンダー
 
05 2020/06 07
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
 
 
アーカイブ
 
 
 
最新TB
 
 
 
最新CM
 
 
 
リンク
 
 
 
Feed
 
 
 
注意点
 

英字のみのコメントは拒否しています。スパムの排除のためご理解をお願いいたします。(でも結構スルーされてしまいます。たまに掃除していますがご容赦のほどを。)

 
 
カウンター
 
 
 
アクセス解析