[[20110302085114]] 『マクロをまとめてファイルサイズを小さくしたい』(miffy) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロをまとめてファイルサイズを小さくしたい』(miffy)winXP excel03

 今まで作ってきたファイルが、所属の規定容量オーバーで配布できないことが判明しました。
 随分無駄なマクロの組み方をしているところも多々あると思うのですが、
 以下のようなマクロが複数入っています。これをうまくまとめられたら
 サイズが小さくなるのではないかと思うのですが…

 (ForのAとBをうまく合体できれば良いのかなぁと思うのですが…)

 Worksheets("入力データ").Activate
 With Worksheets("入力データ")
 Dim A As Long
  For A = 11 To 22  '(J列の)11行目から22行目まで
   If Worksheets("A計算シート").Range("j23").Value = 0 Then  'J23セル(合計)が0だったら終了
  ElseIf Sheets("A計算シート").Cells(A, 10) = 0 Then 'J(10)列A行目(4〜3月)が0だったら終了
  Else  'それ以外

   irow = .Range("b" & Rows.Count).End(xlUp).Row
    .Range("a" & irow + 1).Value = Sheets("A計算シート").Range("j3") 'A列 不変
    .Range("e" & irow + 1).Value = Sheets("A計算シート").Cells(A, 10) 'E列(J11セル) 可変 11行目(Aは11から22)のJ列(10列目)
    .Range("b" & irow + 1).Value = Sheets("A計算シート").Cells(A, 9) 'B列 可変
    .Range("c" & irow + 1).Value = Sheets("A計算シート").Range("b8") 'C列 不変
    .Range("d" & irow + 1).Value = Sheets("A計算シート").Range("e3") 'D列 不変
    .Range("f" & irow + 1).Value = Sheets("A計算シート").Cells(A, 12)  'F列 可変
    .Range("g" & irow + 1).Value = Sheets("A計算シート").Range("o3") 'G列 不変
    .Range("h" & irow + 1).Value = Sheets("A計算シート").Cells(A, 13) 'H列 可変
    .Range("i" & irow + 1).Value = Sheets("A計算シート").Cells(A, 16) 'I列 可変
    .Range("j" & irow + 1).Value = Sheets("A計算シート").Cells(A, 18) 'J列 可変
    .Range("k" & irow + 1).Value = Sheets("A計算シート").Cells(A, 15) 'K列 可変
   End If
  Next A
  MsgBox "○○登録完了"

 Dim B As Long
  For B = 33 To 44
   If Worksheets("A計算シート").Range("j45").Value = 0 Then
  ElseIf Sheets("A計算シート").Cells(B, 10) = 0 Then
  Else
   irow = .Range("b" & Rows.Count).End(xlUp).Row
    .Range("a" & irow + 1).Value = Sheets("A計算シート").Range("j3") 'A列 不変
    .Range("e" & irow + 1).Value = Sheets("A計算シート").Cells(B, 10) 'E列(J33セル) 可変 11行目(Aは11から22)のJ列(10列目)
    .Range("b" & irow + 1).Value = Sheets("A計算シート").Cells(B, 9) 'B列 可変
    .Range("c" & irow + 1).Value = Sheets("A計算シート").Range("b30") 'C列 不変
    .Range("d" & irow + 1).Value = Sheets("A計算シート").Range("e3") 'D列 不変
    .Range("f" & irow + 1).Value = Sheets("A計算シート").Cells(B, 12)  'F列 可変
    .Range("g" & irow + 1).Value = Sheets("A計算シート").Range("o3") 'G列 不変
    .Range("h" & irow + 1).Value = Sheets("A計算シート").Cells(B, 13) 'H列 可変
    .Range("i" & irow + 1).Value = Sheets("A計算シート").Cells(B, 16) 'I列 可変
    .Range("j" & irow + 1).Value = Sheets("A計算シート").Cells(B, 18) 'J列 可変
    .Range("k" & irow + 1).Value = Sheets("A計算シート").Cells(B, 15) 'K列 可変
   End If
  Next B
  MsgBox "○○登録完了"

 End With

 Else
   MsgBox "キャンセル"
   Exit Sub
 End If
 End With


 マクロの容量などたかが知れています。
 数千行書いても数百Kレベルです。

 それよりは、シートが肥大化しているのではないでしょうか。
http://peiyorin.cocolog-nifty.com/blog/2007/09/excel_1635.html
 の辺りを参照して、試してみてください。
 (Mook)

 >Mookさん
 ありがとうございます。
 教えていただいたサイトを参考にマクロ部分を"module1.bas"というファイルに抜き出してみたところ
 26KBしかありませんでした。

 サイトを参考に色々試してみましたが変わらないので、PrtScrがいくつか入っていたり
 書式の設定が多かったりしているからなのかなと思いました。

 これ以上の圧縮は困難な感じですね…(所属のセキュリティ上使える圧縮ファイルがほとんど圧縮しません)
 困りました…

 (miffy)

 画像があるなら画像ソフトを使ってサイズダウンしたり、挿入機能で絵を挿入しなおしたりしてみたら?

 あとはファイルを分割するとか。

 仕事で使ってるなら、有料だけどファイルサイズを小さくするソフトを使ってみるとか。
 (俺がつかってんのはNXPowerLiteってソフトだけど、小さくなるときはすごい小さくなる。
  だめなときはだめだけど。
  体験版もあるし、ためすだけためしてもいいかもね)

 それでもダメなら、ファイル作り直してみるとかね。
 (1111)

 現状ファイルのサイズは何KBですか?
 下記のマクロを実行した場合、どのような結果になりますか?
 公開したくない情報は伏字にして提示可能ですか?
 (イミディエイトウィンドウからコピーすると楽です。)

 Sub CheckSheetData()
    Dim res As String

    For Each ws In Worksheets
        fcount = 0
        For Each r In ws.UsedRange
            If r.Formula <> r.Value Then
                fcount = fcount + 1
            End If
        Next
        res = res & ws.Name & "  => " & ws.UsedRange.Address & "[" & ws.UsedRange.Count & "]//" & fcount & vbNewLine
    Next
    MsgBox res
    Debug.Print res
 End Sub

 使用セルの範囲が実際より広い場合、シートを再作成するとファイルサイズは
 小さくなると思います。
 (Mook)

 >Mookさま
 ありがとうございます。とりあえずよくわからないまま初めてイミディエイトウィンドウを使ってみました…
 一応、上記サイトにあったCtrl+Endで最終セルを確認して無駄なところは削除したりしてはみたのですが…
 現状、3.5MB程度で、もうひとつ0.7MBのファイルと合わせて一つのフォルダに入れて配布したいのですが
 そうすると4.17MBになってしまい、所属指定の圧縮ソフトを使っても3.99MBにしかならず、容量規定は3.5MBまで
 なのです(基本的に指定された圧縮ソフト以外は使えません)。
 画像は皆無ですがPrtScrは10個くらい入っています。

 使い方  => $A$1:$AA$226[6102]//0
 A計算シート  => $B$1:$V$50[1050]//245
 B計算シート  => $B$1:$V$72[1512]//365
 C計算シート  => $B$1:$V$72[1512]//365
 基本情報  => $A$1:$R$11[198]//30
 入力データ  => $A$1:$K$10[110]//28
 初期設定  => $A$1:$M$60[780]//38
 係数  => $A$1:$Q$195[3315]//544
 ○○通知  => $A$1:$T$32[640]//10
 封筒印刷  => $B$2:$T$15[266]//4
 ○○配布確認表  => $A$2:$T$38[740]//8
 メンテナンス  => $B$6:$C$34[58]//0

 (miffy)

 うーん、これで3.5MBですか。
 数式や使用範囲はそれほど大きくなさそうですね。
 係数シートというのは配布した後に変化することはないでしょうか。
 もし固定値でよければ配布用にコピーしたファイルで、
 (1)新規シート作成
 (2)「係数」シートの使用範囲をコピー
 (3)新規シートに形式を選択して貼り付けで「値」を選択。
 (4)「係数」シートの削除
 (5)新規シート名を「係数」に変更
 これで動作的に問題なければ、保存してみてサイズはどうなりますか?

 追伸:
 ん?
 PrtScr て画面キャプチャのことですか?
 これは画像と同じなのでファイルサイズが大きくなります。
 上記をやる前に、PtrScr(画面画像)をコピーし、編集の形式を選択して貼り付け
 から 「MS Office 描画オブジェクト」か「拡張メタファイル」を選択し、もとの画像を
 削除して保存、としても変わらないでしょうか。
 (Mook)

 >Mookさま
 コメントありがとうございます。
 PrtScrは画面キャプチャと言うんですね;
 試しにそのままデスクトップを保存したもの、「MS Office 描画オブジェクト」と「拡張メタファイル」
 でそれぞれ保存してプロパティを見てみたところ、そのままではサイズは変わりませんでした(拡張メタファイルの方は
 大きくなってしまいました)が、それぞれ同じくらいの大きさに縮小してみたところ、「MS Office
 描画オブジェクト」のサイズが一番小さくなりました。
 だいたい見た目で同じ大きさでの比較ですが、そのままが957KB、描画‥が648KB、拡張‥が1.78MB?でした。

 なので描画オブジェクトでコピーしなおして、縮小して再チャレンジしてみたいと思います。

 それでも無理なら別ファイル保存を検討してみますが、「係数」シートは各「計算シート」の計算過程で
 非常に重要なので、できれば一緒のファイルで保存したいのですが…
 とにかくやってみます、ありがとうございました。

 (miffy)


 画像の選択フォーマットとしてどれが最適かは分かりませんが、画像は大きさが
 小さいほど、解像度が低いほどサイズは小さくなります。
 全画面でも600KB は大きいですね。
 内容によりますがサイズや画質を低く抑えられれば半分程度にはなると思います。

 シートに関しては誤解がありそうなので補足ですが、目的は数式の値への置換え
 です。その際に新規シートにした方がゴミが残らないように上記の方法を提案
 したのであって、シートを別ファイルにするという意味ではありません。

 ですが、今回の原因は画像にあることは間違いなさそうなので、シート自体は
 大きくないのだと思います。ですから、係数シートの処理は不要でしょう。

 それを確認するのであれば、画像を全部削除したファイルを保存してみて
 (もちろん別名で)、ファイルサイズを見てみればよいと思います。
 (Mook)

 一応ありがちな誤解を回避する為に書き込みです。
 100Mbの画像があったとして、これをエクセルに貼り付けてから
 見た目の大きさを変えても容量に変化はありません。

 ペイントソフトや、画像縮小ソフトなどを使用して縮小すれば、容量が減ります。
 Mookさんが書かれている通り、
 ・大きさを小さくする(1000×1000を500×500ピクセルにする、など)
 ・解像度を下げる→500dpiを250dpiにするなど。
 解像度を下げるとサイズは変わらないけど、画像が荒くなる

 マニュアル用のデスクトップのプリントスクリーンかな?
 不要部分を省くために、対象のウィンドウをアクティブにして
 Alt+PrtScrで対象のみプリスク出来ます

 以上、ご存知でしたらスル〜してくださいまし。
 (とおりすがりさん)

 >Mookさん、とおりすがりさん
 色々ありがとうございました。
 「係数」シートの件はご指摘通り勘違いしていました;

 PrtScr画像を形式を変えて保存し直して小さくしてもあまりサイズが変わらなかったのですが、
 とおりすがりさんのアドバイスでペイントソフトに一度貼り付けてからファイルに戻したところ、
 みるみるサイズダウンしました!

 4.17MBが3.35MBに減りまして、フォルダに入れても3.35MB、指定の圧縮ソフトで3.23MBまで
 減らすことが出来ました。これで他のファイルと一緒のフォルダに入れて配布することが出来ます。

 使い方シートの画質が劣化してしまったのが残念ですが、今回は配布が最優先なので涙を飲むこととします。

 途方に暮れていたので本当に助かりました。
 ありがとうございました。

 (miffy)

 画像の縮小に関しては使用するソフトの性能によるところが大きいです。
 MS Paint は標準ソフトですが、あまり高機能ではない(縮小結果がきれい
 ではない)ので時間があるときに探してみておくことをお勧めします。

 画面の内容にもよりますが、1画面100〜200KBまで落としても結構きれいに
 見れますよ。
 私が普段使っているのは Paint.Net や IrfanView ですが、お手軽ですが
 そこそこきれいに処理できます。
http://www8.plala.or.jp/kusutaku/iview/
http://www.getpaint.net/
 (Mook)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.