アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるデータベースからエクスポートした4MB位のCSVをエクセルで集計しています。

エクセルにCSVを取り込むと、エクセルBook自体が4MB位になり(当然です)、
取り込んだシートから複数の集計を別シートで作成していくと、
最終的に保存したBookのファイルサイズが20MB越えそうです。

それでこんな事はできないでしょうか?
CSVファイル自体はWindows標準のzip圧縮すると500KB位になりました。

Excelブックを開いた時に、マクロボタンを押すなどして、zip圧縮されたままの
CSVデータを、例えばCSVという名前のシートに取り込むことはできないでしょうか?
そして、紐づいた各シートで集計がされると。(グラフやピボットテーブル等とリンク)

Excelブックを閉じるときにCSVシートを自動的にクリアして終了と。

これができれば、最低限のサイズのExcelブックとzip化したCSVを保管しておけば
良い事になるという机上の空論なのですが、、、
簡単なサンプルマクロでもあると助かります。

A 回答 (4件)

圧縮されたまま、という言葉通りに受け取ったらできません。



しかし、zipファイルのまま、という部分だけで考えればできます。
できますが、zipファイルから対象のCSVファイルをTempディレクトリなどで解凍する必要があります。
そのため、都度実行するのに相応の時間もかかることになります。
それを比較してもメリットがあるならそうすればいいかと思います。

しかしそういう問題ではないと思います。
集計にそれが必要なら別に20MBになっても何の問題もないかと思います。
1ファイルで20MBになるのが嫌なら4MBのファイルを5つ用意して、集計用のファイルからブック参照で情報を集計すればいいかと思います。

また、後戻りが利くなら、エクスポートする段階で、集計されたデータをエクスポートすればいいかと思います。
    • good
    • 0

こんにちは



>保管しておけば良い事になるという机上の空論なのですが、、
残念ながら「机上の空論」です。

そのCSVデータが、常に参照する必要があるようなものなら、あきらめて独立のエクセルファイルなどにしておくのが宜しいかと。
ご質問の様に毎回、解凍して読み込むような処理をしていると、No1様がご指摘のように悲しい結末になろうかと。

「ある処理」をするときにだけ参照すれば良いような類のデータであるなら、その処理の時だけシートに読み込んで処理が終わったら、そのシートは削除してから保存するような考え方もあるでしょう。

実行時のメモリ消費も押さえたいというのであれば、CSVを一気に展開せずに、テキストファイルとして1行ずつ(あるいは数行?)読み込みながら処理をしてゆくという方法も考えられます。
シークエンシャルに処理できるような内容でないと難しいかも知れませんが。

結局のところ、処理の内容と頻度などから、方法を判断するのが良いのではないでしょうか。
    • good
    • 0

元がデータベースならそこにExcelを繋げられないの?(エクスポート自体をなくす)


若しくはSQLiteなどの軽量化データベースにCSVデータを放り込んで、それとExcelを接続する。

なんて詳しくない人間の戯言ですけどね。
    • good
    • 0

できないから。

それ。

できたとしても、ZIP圧縮してもデータとして取り出す時にはテキストに置き換わるので圧縮は解除される。
むしろ圧縮ファイルを展開する手間がかかるだけと言う悲しい結果になるよ。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています