• 締切済み

Excel VBA 圧縮、伸長の関数は?

Excel VBAでプログラミングしています。 扱うデータ量がおおきくなったためデータの保存はExcelシートから 外部ファイルに変更しました。しかし、ファイルサイズが大きくまた、VBAでの 処理が重く感じます。そこで、データを圧縮、伸長する関数があれば便利と思っています。ファイルに出力後に圧縮する方法はあるようですが、VBA処理、ファイルの読み書き時にデータが軽いといいので、VBAで扱える関数があればと思っています。関数、または他の方法をご存じの方、お教え願います。

みんなの回答

回答No.3

>VBA処理、ファイルの読み書き時にデータが軽いといい 圧縮されたデータを扱うとしても、処理時は伸長された状態でないと処理できないと思うので、読み込み時に必ず伸長処理が必要になると思います(データが圧縮されたままでは処理できない)。これでは逆にオーバーヘッドになるんではないでしょうか? また、書き込み時については、通常ファイルとして保存してから圧縮というのが普通な気がします。圧縮しながら保存というのは独自でプログラミングするしかないんではないでしょうか?わかんないですけど。 仮にできたとしてもそれも圧縮処理が入るのでオーバーヘッドになるんでは? 圧縮というのはファイル(群)の譲渡等に便利であったり、有限の記憶デバイス(HDDやテープ)やネットワーク帯域を有効に使うためのものであって、処理を軽くするためのものではないと思います。むしろ圧縮・伸長処理自体はCPUの負荷になると思います。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

未経験ですが、Gogleで「VBA 圧縮 Zip」で照会スると、たくさん記事が出る。 http://oshiete1.goo.ne.jp/qa2405614.html http://scripting.cocolog-nifty.com/blog/2007/11/vbazip_a144.html http://www.xillion.net/script/2004/10/zip.html などどうだろう。 エクセルの普通の関数やVBAの組み込み関数には無い。 >VBA処理、ファイルの読み書き時にデータが軽いといいので・・ あくまで最終段階で、ファイルに書き出す段階での処理と思う。 VBA処理、とはどういうことだろう。 1レコードごとに読み込み、圧縮を解き、処理し、圧縮して書き出すといった場合の話でなく、一律になべてファイル全体に関することしか考えられないと思う。 ほかにファイル構造の簡単な、テキストファイルにするなどを考えるのが筋では。 この類の質問はこのコーナーには十年来あまり載ったことが無く、質問者の発想が行過ぎていないのかな。

adumane
質問者

補足

皆さん、ご回答ありがとうございます。ほとんどのご回答のとおり、ファイルに書き込んだ後がいい、通常処理での圧縮、伸長はかえって重くなるのでは。とのご意見、そのとおりだと思います。 この質問の経緯は以下のとおりです。 今、プログラミングしているデータは1レコードの長さは約2000文字です。これが、2から3万レコードあり、レコードの参照、変更は一部でありアクセス順番はランダムに発生するため、データはすべて配列としてメモリに取り込んでいます。メモリを相当使用すると予想されるため、これを圧縮した形で配列にし、計算処理時に伸長すればと考えました。処理はすべてのレコードを対象としていないため、伸長時間は少ないと見ています。

回答No.1

圧縮したら処理の分だけ重くなると思うが ネットワークでもあるまいし、 まあ、未知数な部分もあるが。

関連するQ&A