• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:勝手に肥大化したExcel2007ファイルへの対応)

Excel2007ファイルの肥大化対策とデータ削除方法

このQ&Aのポイント
  • Excel2007ファイルが勝手に肥大化する現象について、複数の行や列を非表示もしくは削除する方法や、データを削除する際に肥大化する現象について解説します。
  • Excel2007ファイルが保存する際に容量が増える原因として、行や列の非表示や削除によって見えないデータが保存されることが考えられます。また、VBAを使用してデータを削除する際にも肥大化する現象が起こることがあります。
  • Excel2007ファイルを軽くするための方法としては、不要な行や列を削除する、数式や条件付き書式の使用を最小限にする、画像やオブジェクトを圧縮するなどがあります。また、特定のセル範囲をコピーして新しいファイルに貼り付けることで、ファイルのサイズを小さくすることもできます。

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

  • ベストアンサー
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.1

1週間以上も回答なしなのね・・・(;; ◆Clearについて まず、シートが"デフォルト書式"の情報を持ってます。 書式には2種類あって、感覚的に知っていると思いますが、  1.列行単位の書式 (背景)  2.セル単位の書式 (前景) Clearは、デフォルト書式に"戻す"んであって、文字通りの"クリア"になるとは限らないんです。 特定セルをClearした場合、 ・初期状態  背景がデフォルト書式なので、セル毎の書式を消す。  = 情報量が減る。 ・全セル選択で、セルを黄色くした  背景は黄色なので、セル毎にデフォルト書式を設定。  = 情報量が増える。 列のClearなら、しっかりクリアしてくれますが、 > Range("ERX1:XFD10706").Clear だと、Rangeはあくまでセル範囲。列の書式を残し、セル毎に書式が設定されちゃいます。 ◆対処 原因は書式と考えるのが自然でしょうし、対処はやっぱ列/行の削除ですよね。。。 VBAなら固まらないこともあるので、試すなら デフォルト書式になるClearより、列/行の書式が残る削除.Deleteがオススメ。  '範囲は要変更  Activesheet.Columns("ERX:XFD").Delete  Activesheet.Rows("500:10706").Delete 1行ずつ処理ループのがいいのかな・・・

MKT_
質問者

お礼

 ap_2 様  どうもありがとうございます!!m(_ _)m お礼が非常に遅くなり大変失礼いたしました。たった今、メール(2週間経ちました)を見てご回答をいただいております事に気が付きました。どうやら、いつもチェックを付けております「回答を頂いた時にメールを受け取る」にチェックを付けていたなった(?)ようでございます。この度はご親切に誠にありがとうございます。 >1週間以上も回答なしなのね・・・ はい、仰られる通りでございます(;_;) 確かに今回の不可解な現象はアドバイスをいただきにくいかな、とも考えておりましたが。。。 >列のClearなら、しっかりクリアしてくれますが、 >> Range("ERX1:XFD10706").Clear >だと、Rangeはあくまでセル範囲。列の書式を残し、セル毎に書式が設定されちゃいます。 なるほど(・_・)! 全く気が付きませんでした。列・行の集合体として扱われていなかったのでございましたか。。。。 >書式には2種類あって、感覚的に知っていると思いますが、 はい、何となく存じてはおりましたが、 >・全セル選択で、セルを黄色くした > 背景は黄色なので、セル毎にデフォルト書式を設定。 > = 情報量が増える。 を理解にまで行き着いておりませんでした。 ご記載いただいたように、~.Columns.Deleteと、~.Rows.Deleteにすべきでございますね。  この度は非常に有益なアドバイスをいただき助かりました。ご閲覧いただけてよかったです。誠にありがとうございました!!m(_ _)m

MKT_
質問者

補足

※閲覧してくださる方々へ ~  No.2のご回答の方に、1行ずつループ削除するコードも書いてくださっておりますb

その他の回答 (1)

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

VBA使えそうな雰囲気ですが、せっかくなので。 cmin,rminの削除開始位置から、ループで1行ずつ削除します。 見れるよう、あえて描画ONでSelect。邪魔かも? Sub DeleteXXX() Dim cmin&, cmax&, rmin&, rmax&, i& 'cmin,rminを含む、その外を削除 '削除開始する列/行番号 cmin = 501 '列の削除 (横:Cなら3) rmin = 1001 '行の削除 (縦の番号) '描画ON Application.ScreenUpdating = True '使用中の最大Row,Colを取得 With ActiveSheet.UsedRange  rmax = .Rows(.Rows.Count).Row  cmax = .Columns(.Columns.Count).Column End With '行削除ループ For i = rmax To rmin + 1 Step -1  ActiveSheet.Rows(i).Select  ActiveSheet.Rows(i).Delete Next '列削除ループ For i = cmax To cmin + 1 Step -1  ActiveSheet.Columns(i).Select  ActiveSheet.Columns(i).Delete Next End Sub 余談ですが、 列/行に書式を設定した状態で、全セル選択して削除すると、縦方向の書式だけ残るのが謎です。 こういう列単位とかの書式情報は、どこにどう持ってるんですかね。。。

MKT_
質問者

お礼

 どうもありがとうございます!! 2度もアドバイスいただきましてm(_ _)m No.1でいただけたコードでも大丈夫なのではないかな?と思うのでございますが、1行(列)の方が良いのでございましょうか?? (確かに、選択行(列)が少ない方が、Excelが固まりにくい気が致しますが。。) >列/行に書式を設定した状態で、全セル選択して削除すると、縦方向の書式だけ残る  うわ、これも存じませんでした(・。・)誠にありがとうございますm(_ _)m 一体何の意図があってこのような仕様になるのでございましょうかね。。? ExcelとVBAは一番好きなツールなので、このような意味不明な部分やクラッシュがもっと解決されれば非常に嬉しいのですが。。。orz  ループ削除と一括削除の違いの検証も含め、今日から沢山使わせていただきます!!  この度はご親切に本当にどうもありがとうございました!!m(_ _)m

MKT_
質問者

補足

※閲覧してくださる方々へ ~  No.2のご回答の方に、1行ずつループ削除するコードも書いてくださっておりますb

関連するQ&A