• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで分割したBOOKが元データより大きい?!)

VBAで分割したBOOKが元データより大きい?!

このQ&Aのポイント
  • VBAでデータを切り分ける際に、生成されたBOOKのサイズが元データよりも大きい問題が発生しました。
  • 元データのマクロがあるBOOKのサイズは251KBしかないのに、店ごとに切り分けたBOOKは2054KBもあります。
  • この問題の原因として、店ごとに切り分ける際に余分なデータがコピーされてしまっている可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.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 (´^∇^)σ いかがでしょう?

emaxemax
質問者

お礼

たいへん詳しくご説明いただき、有難うございます。 まさにおっしゃる通り、データがどこまでになるか不定なので列全体に書式設定をしていました。 Cells.Copy で全部コピーするのをやめ.UsedRange.Copy と変えただけでサイズがいきなり100分の1になりました! ありがとうございます。