質問: エクセルで画像を貼ったファイルを作りました。 貼った画像は10枚ほどで いずれも10~100kバイトほどの画像で合計で500kもありません。 ところがファイルを保存するとサイズが3Mにもなってしまいました。 会社の規則で3M以上のファイルはメールで送らずサーバに上げることになっているのですが 出来ればメールで送れるサイズにしたいです。 画像ファイル自体をリサイズして合計を200kほどにしても出来上がったエクセルファイルのサイズはわずかに減った程度でした。 また、新規作成したファイルに同じ画像ファイルを貼り付けて保存したところちゃんと500k強のファイルになりました。 しかし、その新規ファイルから画像をコピーしてもとのファイルへ貼り付けて保存するとやはり3Mのファイルになってしまいます。 いったいどうしたらよいのでしょうか?
回答: こんにちは。KenKen_SP です。 下記のようなマクロを走らせて、一度シートのクリーンアップを してみてはどうですか? 残すオブジェクト(画像とかシェープとかボタン)を選択し、 マクロを実行すると、非選択のオブジェクトを削除します。 編集の過程で何らかの理由で「表示されていない、しかしデータ としてはブック内に残っている」オブジェクトが発生することが あります。 これらのゴミデータが、ブックのファイルサイズ肥大化の原因に なっている場合があります。 【手順】 ※注意 VBA による操作はやり直しができませんので、必ずバック アップしてから次の操作を行って下さい。 1. 単独で新規ブックを作成し、アクティブにする 2. [Alt]+[F11]キー押下で Visual Basic Editor(以下 VBE ) を起動 3. VBE メニューから[挿入]-[標準モジュール]をクリック 4. 3. で開いたスペースに下記コードをコピー&ペースト 5. VBE を閉じる 6. 1. のブックを開いたまま、今回の処理対象となるブックを 開いてアクティブにする 7. マクロを実行 '以下コード Sub シート内の不要オブジェクト削除() Dim Obj As Object Dim i As Long Dim aryObjName() As String Dim Flag As Boolean If TypeName(Selection) = "Range" Then Exit Sub '選択されたオブジェクト名を取得 i = 0 ReDim aryObjName(Selection.ShapeRange.Count - 1) If Selection.ShapeRange.Count = 1 Then aryObjName(0) = Selection.Name Else For Each Obj In Selection aryObjName(i) = Obj.Name i = i + 1 Next Obj i = i - 1 End If ReDim Preserve aryObjName(i) '不要なオブジェクトを削除 For Each Obj In ActiveSheet.DrawingObjects Flag = False For i = 0 To UBound(aryObjName) If Obj.Name = aryObjName(i) Then Flag = True End If Next i If Flag = False Then Obj.Delete End If Next Obj Set Obj = Nothing End Sub