アカウント名:
パスワード:
俺もiTextやApache PDFBoxでゴチャゴチャとpdfを扱った経験はいくつもあるけどExcelのマクロだって、使ってみりゃいい具合に強力なんよな。VBAはちょっと慣れないけど。セル結合もセルの幅も背景色も、ロジックで調整し放題だし。DBにも普通に繋げられるし。他のドキュメントも開けるし。
マクロは自分一人で管理する分にはいいと思うよ。VBA環境はいい所もある。
ExcelVBAの地獄なところは、・テキストがxlsmに埋め込まれてソース管理できない(工夫すればできるが労力が無駄)・テストが書けない(工夫(ry・エラー行が特定できない事がある・謎のリソース不足で落ちる(VBAで不足するほどリソースを大量に使う発想がそもそもおかしいのだが)・TryCatchがない・動的配列が無い(正確にはそういったものは皆無ではないがReDimとかいつの時代のアレだ)・辞書(連想配列)が使い辛い・当然ラムダとかない、というか関数参照が碌に扱えないのでちょっと本腰入れてプログラム書こうとか
Excel内部にはマクロを持たせず、PowerShell等、外部からExcelを操作したらどうかと検討したこともあったけど利用する側の利便性も考慮したベストな方法が見つからない。
外部からだと、1変数参照に「ExcelOpen→参照→ExcelClose」とかなるからのろさダイナマイトになるでしょう。#外部からシートをなめるのと、検索条件をシートの空きに書いて#一気にVLookupするのとの時間差がそれ。
うーん、dde操作イメージかな?
普通は、COM操作になるので、参照毎にOpen,Closeする必要なんてないと思いますよ。
>参照毎にOpen,Closeする必要なんてない
たしかにOpen,Closeというのは言い過ぎだったかも知れませんが、内部からCells(,)を呼ぶのと、外部から呼ぶのでは速度が段違いです。
1000行位なめると、その差は歴然でした。Open,Closeはうそかも知れませんが、なんらかのオーバーヘッド(内部なら保持可能な参照を、外部からでは持ち切れず、一々、参照を取り直しとか)が有るのは事実です。
内部(COMインターフェースも不要)と外部(COM操作、Excel.Applicationへの参照を変数に入れ、それに対する操作)での比較です。それはご指摘の通りです。
識者に教えていただきたいのですが、VBAでCells(,)とやるのと、外部のプログラムから相当の処理をやるのと速度に違いがでるのでしょうか?
VBAのプログラムはExcelファイルの中に組み込みという違いがありますが、技術的にはどっちもCOMで通信してるのであってそこの性能は変わらないとおもってます。
アウトプロセス(OLEサーバ)とインプロセスの差では無いでしょうか?
後者ならポインタを保持すれば参照になるでしょうけれど、前者は先方のプロセスのポインタは無意味です。意味のある様に一々、解釈しなおさないといけないのでしょう。そして、Excelはその再解釈がとくに重い(accdbなどと比べて)データ構造だからではないかと想像します。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー
自分もそうするかもなあ (スコア:0)
俺もiTextやApache PDFBoxでゴチャゴチャとpdfを扱った経験はいくつもあるけど
Excelのマクロだって、使ってみりゃいい具合に強力なんよな。
VBAはちょっと慣れないけど。
セル結合もセルの幅も背景色も、ロジックで調整し放題だし。
DBにも普通に繋げられるし。他のドキュメントも開けるし。
Re: (スコア:0)
マクロは自分一人で管理する分にはいいと思うよ。VBA環境はいい所もある。
ExcelVBAの地獄なところは、
・テキストがxlsmに埋め込まれてソース管理できない(工夫すればできるが労力が無駄)
・テストが書けない(工夫(ry
・エラー行が特定できない事がある
・謎のリソース不足で落ちる(VBAで不足するほどリソースを大量に使う発想がそもそもおかしいのだが)
・TryCatchがない
・動的配列が無い(正確にはそういったものは皆無ではないがReDimとかいつの時代のアレだ)
・辞書(連想配列)が使い辛い
・当然ラムダとかない、というか関数参照が碌に扱えないのでちょっと本腰入れてプログラム書こうとか
Re: (スコア:0)
Excel内部にはマクロを持たせず、PowerShell等、外部からExcelを操作したらどうかと検討したこともあったけど
利用する側の利便性も考慮したベストな方法が見つからない。
Re: (スコア:0)
外部からだと、1変数参照に「ExcelOpen→参照→ExcelClose」とかなるから
のろさダイナマイトになるでしょう。
#外部からシートをなめるのと、検索条件をシートの空きに書いて
#一気にVLookupするのとの時間差がそれ。
Re: (スコア:0)
うーん、dde操作イメージかな?
普通は、COM操作になるので、参照毎にOpen,Closeする必要なんてないと思いますよ。
Re: (スコア:0)
>参照毎にOpen,Closeする必要なんてない
たしかにOpen,Closeというのは言い過ぎだったかも知れませんが、
内部からCells(,)を呼ぶのと、外部から呼ぶのでは速度が段違いです。
1000行位なめると、その差は歴然でした。Open,Closeはうそかも知れませんが、
なんらかのオーバーヘッド(内部なら保持可能な参照を、外部からでは持ち切れず、
一々、参照を取り直しとか)が有るのは事実です。
内部(COMインターフェースも不要)と外部(COM操作、Excel.Applicationへの
参照を変数に入れ、それに対する操作)での比較です。
それはご指摘の通りです。
Re:自分もそうするかもなあ (スコア:0)
識者に教えていただきたいのですが、VBAでCells(,)とやるのと、外部のプログラムから相当の処理をやるのと
速度に違いがでるのでしょうか?
VBAのプログラムはExcelファイルの中に組み込みという違いがありますが、技術的にはどっちもCOMで通信してるのであって
そこの性能は変わらないとおもってます。
Re: (スコア:0)
アウトプロセス(OLEサーバ)とインプロセスの差では無いでしょうか?
後者ならポインタを保持すれば参照になるでしょうけれど、前者は
先方のプロセスのポインタは無意味です。意味のある様に一々、解釈
しなおさないといけないのでしょう。そして、Excelはその再解釈が
とくに重い(accdbなどと比べて)データ構造だからではないかと
想像します。