- ベストアンサー
VBAで分割したBOOKが元データより大きい?!
- VBAでデータを切り分ける際に、生成されたBOOKのサイズが元データよりも大きい問題が発生しました。
- 元データのマクロがあるBOOKのサイズは251KBしかないのに、店ごとに切り分けたBOOKは2054KBもあります。
- この問題の原因として、店ごとに切り分ける際に余分なデータがコピーされてしまっている可能性があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
わたしもエクセル2000です。 何度やってもそのような現象が再現できないので回答をあきらめていましたが、ひょっとしてと思い試したところ再現しました。 > 配置は、A列が日付け(シリアル値)、C列が店舗コード(010~050) A列がシリアル値とお書きですが、きっと表示はセルの書式設定で日付けにしてますよね? C列も、店舗コード(010~050)ということは、頭の0を消さないため、これもセルの書式設定で文字列にしてますよね? だとすれば、これです! こちらでのテストでは、最初は書式をまったく考慮しなかったので再現しませんでしたが、A列とC列のそれぞれの列全部に書式を設定したところ、まさにその現象が発生しました。 どうやら列全部に書式を設定したシートにオートフィルタをかけてSheets("DATA")で抽出したデータを Cells.Copy で全部コピーし貼り付けると、貼り付けられた側のUsedrangeの行数は、フィルタで隠れた部分以外の全部の可視セルになってしまうようです。 つまり貼り付けられたデータに書式設定があるとそこもデータ領域となるようですね。(作成された新たなファイルでCtrl+EndでLastCellを検索してみるとわかります。) その結果、抽出データを貼り付けて新たに作成されたBOOKは元データのBOOKに比べて極端に大きなサイズになってしまいます。 これは自宅の2003でやっても再現できました。 原因がわかれば対策は簡単。( ̄ー ̄)v 元データ作成時に列全体に書式設定するのをやめるか、抽出したデータを Cells.Copy で全部コピーするのをやめればいいんです。 Sub TEST01() Dim c As Range Dim ws As Worksheet, wb As Workbook Sheets("DATA").Range("A2:M2").AutoFilter For Each c In Sheets("店舗一覧").Range("A1:A50") Sheets.Add Set ws = ActiveSheet With Sheets("DATA") .Range("A2").AutoFilter Field:=2, Criteria1:=c.Value .UsedRange.Copy ws.Cells(1, 1) End With With ws .Name = c.Value .Move Set wb = ActiveWorkbook With wb .SaveAs Filename:=ThisWorkbook.Path & "\" & c.Value & ".xls" .Close (True) End With End With Sheets("DATA").AutoFilterMode = False Next c End Sub (´^∇^)σ いかがでしょう?
お礼
たいへん詳しくご説明いただき、有難うございます。 まさにおっしゃる通り、データがどこまでになるか不定なので列全体に書式設定をしていました。 Cells.Copy で全部コピーするのをやめ.UsedRange.Copy と変えただけでサイズがいきなり100分の1になりました! ありがとうございます。