
あるデータベースからエクスポートした4MB位のCSVをエクセルで集計しています。
エクセルにCSVを取り込むと、エクセルBook自体が4MB位になり(当然です)、
取り込んだシートから複数の集計を別シートで作成していくと、
最終的に保存したBookのファイルサイズが20MB越えそうです。
それでこんな事はできないでしょうか?
CSVファイル自体はWindows標準のzip圧縮すると500KB位になりました。
Excelブックを開いた時に、マクロボタンを押すなどして、zip圧縮されたままの
CSVデータを、例えばCSVという名前のシートに取り込むことはできないでしょうか?
そして、紐づいた各シートで集計がされると。(グラフやピボットテーブル等とリンク)
Excelブックを閉じるときにCSVシートを自動的にクリアして終了と。
これができれば、最低限のサイズのExcelブックとzip化したCSVを保管しておけば
良い事になるという机上の空論なのですが、、、
簡単なサンプルマクロでもあると助かります。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
圧縮されたまま、という言葉通りに受け取ったらできません。
しかし、zipファイルのまま、という部分だけで考えればできます。
できますが、zipファイルから対象のCSVファイルをTempディレクトリなどで解凍する必要があります。
そのため、都度実行するのに相応の時間もかかることになります。
それを比較してもメリットがあるならそうすればいいかと思います。
しかしそういう問題ではないと思います。
集計にそれが必要なら別に20MBになっても何の問題もないかと思います。
1ファイルで20MBになるのが嫌なら4MBのファイルを5つ用意して、集計用のファイルからブック参照で情報を集計すればいいかと思います。
また、後戻りが利くなら、エクスポートする段階で、集計されたデータをエクスポートすればいいかと思います。
No.3
- 回答日時:
こんにちは
>保管しておけば良い事になるという机上の空論なのですが、、
残念ながら「机上の空論」です。
そのCSVデータが、常に参照する必要があるようなものなら、あきらめて独立のエクセルファイルなどにしておくのが宜しいかと。
ご質問の様に毎回、解凍して読み込むような処理をしていると、No1様がご指摘のように悲しい結末になろうかと。
「ある処理」をするときにだけ参照すれば良いような類のデータであるなら、その処理の時だけシートに読み込んで処理が終わったら、そのシートは削除してから保存するような考え方もあるでしょう。
実行時のメモリ消費も押さえたいというのであれば、CSVを一気に展開せずに、テキストファイルとして1行ずつ(あるいは数行?)読み込みながら処理をしてゆくという方法も考えられます。
シークエンシャルに処理できるような内容でないと難しいかも知れませんが。
結局のところ、処理の内容と頻度などから、方法を判断するのが良いのではないでしょうか。
No.2
- 回答日時:
元がデータベースならそこにExcelを繋げられないの?(エクスポート自体をなくす)
若しくはSQLiteなどの軽量化データベースにCSVデータを放り込んで、それとExcelを接続する。
なんて詳しくない人間の戯言ですけどね。
No.1
- 回答日時:
できないから。
それ。できたとしても、ZIP圧縮してもデータとして取り出す時にはテキストに置き換わるので圧縮は解除される。
むしろ圧縮ファイルを展開する手間がかかるだけと言う悲しい結果になるよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
[VBA]標準機能のみでパス付zipファイルの解凍
Excel(エクセル)
-
【Excel VBA】Windowsの標準機能のみでExcelファイルをZIPファイルに圧縮する方法
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
B列の最終行までA列をオートフィル
Visual Basic(VBA)
-
5
エクセルファイルを開く時、常に同じシートから開くようにするには?
Windows Vista・XP
-
6
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
7
会社のネットワーク上のファイルを開けない こんにちわ 今大変困ってます 会社のネットワーク上のファイ
Visual Basic(VBA)
-
8
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
9
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
10
VBAからファイルをzip化したい
Access(アクセス)
-
11
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
12
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
13
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
14
複数の文字列のいずれかが含まれていたらTRUEを返す関数について
Excel(エクセル)
-
15
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
16
ファイルを閉じたままの外部参照で最終行の行数取得
Visual Basic(VBA)
-
17
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
18
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
19
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
20
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで別のブックにシートをコピ...
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBA コードを実行すると画面が...
-
excel VBA 空白に見えるセルの...
-
エクセルVBA エクセルを開いた...
-
フォルダ内の全てのファイルに...
-
エクセルVBAが途中で止まります
-
【VBA】全シートの計算式を全て...
-
Workbooks(workbooks.count)に...
-
【マクロ】アクティブセルにブ...
-
[Excel]ADODBでNull変換されて...
-
【マクロ】AブックからBブック...
-
エクセルVBAでテキストボックス...
-
Excel UserForm の表示位置
-
「段」と「行」の違いがよくわ...
-
Excel グラフのプロットからデ...
-
エクセルVBA 配列からセルに「...
-
B列の最終行までA列をオート...
-
Excel VBAでのWorksheet_Change...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
VBAで別のブックにシートをコピ...
-
ワイルドカード「*」を使うとう...
-
VBA コードを実行すると画面が...
-
VBA 実行時エラー 2147024893
-
[Excel]ADODBでNull変換されて...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】インデックスが有...
-
【ExcelVBA】zip圧縮されたCSV...
-
Excelマクロ 該当する値の行番...
-
【Excel VBA】書き込み先ブック...
-
【VBA】全シートの計算式を全て...
-
Excelファイルを開くとき、読み...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
フォルダ内の全てのファイルに...
-
オブジェクトは、このプロパテ...
おすすめ情報