- ベストアンサー
エクセルの挿入画像を削除するツールまたはソフト
ファイルサーバ内に格納されているエクセルファイルの挿入された画像だけを削除して、上書き保存するツールまたはソフトウェアを探しています。 多数のエクセルを複数に指定して、動作できるものだと理想的です。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>多数のエクセルを複数 どのくらい多数なのか問題ですね。環境に依存してエラーが出たりしなければいいんですが。 また、サーバーのフォルダー構造がどうなっているのか、サブフォルダーもサーチして処理を行いたい? さらに、この処理をいつ行えるのか気になります。バックアップを取ってテストを繰り返すことが必要でしょう。 >画像だけを削除 質問には「画像」とありますが、Excel VBAで「画像」を表すShape.Typeプロパティ・ShapeRange.Typeプロパティには30種以上のMsoShapeType列挙定数があります。いわゆるJPGなどの画像(msoPicture)はその一部で、グラフ(msoChart)やコメント(msoComment)、フォームコントロール、ActiveXコントロール(VBA)も画像扱いで、図形・オートシェイプは単体とグループ化されていれば別物です。 このような問題点があるので、何かツールまたはソフトがあっても、カスタマイズが必要でしょう。 現実的には、VBAで対応し、サーバーのフォルダー単位にパソコンに退避して一括で処理するんでしょうか。上手くいけばサーバーに戻すとか。しかし、LINKが張られていると怖い処理になりそうです。 参考のマクロですが、サーバーではなく、パソコン内のドライブのフォルダーを指定して「Excel VBA での画像全部」を削除して上書き保存しています。 テスト環境で実行してみてください。「グラフは残す」とか「コメントは残す」とかになれば、細かなコーディングが必要になります。MsoShapeType列挙定数はネットで調べられるでしょう。 当方、Win10、Excel2010です。ご参考に。 '// サンプル。自PC内のフォルダーを指定しています Sub wbAllShapesDelete() Dim mainWB As Workbook '// このワークブック Set mainWB = ThisWorkbook Dim elmWB_Path As String '// 対象のフォルダー Dim elmWB_Name As String '// 対象のブック名(*.*) Dim elmWB As Workbook '// 開いたブック名 Dim getWB_Name As String '// 対象のブック名 Dim s As Integer '// シートカウンタ Dim shp As Shape '// Shapeオブジェクト elmWB_Path = "N:\****\******" elmWB_Name = "*.xls*" Application.ScreenUpdating = False getWB_Name = Dir(elmWB_Path & "\" & elmWB_Name) While getWB_Name <> "" Set elmWB = Workbooks.Open(elmWB_Path & "\" & getWB_Name) With elmWB For s = 1 To .Worksheets.Count For Each shp In .Worksheets(s).Shapes 'If shp.Type = msoPicture Or shp.Type = msoAutoShape Then shp.Delete '// 全部消している 'End If Next Next .Close SaveChanges:=True End With getWB_Name = Dir() Wend Application.ScreenUpdating = True End Sub
その他の回答 (1)
- kon555
- ベストアンサー率51% (1848/3569)
VBAが環境的に使用可能であれば、VBAでの対処が一番簡単でしょう。 ただサーバー上へのアプローチだと、ヘタに複数ファイル指定を可能にするのも怖いです。この辺りは、貴方自身がスキルをもっているなら手を出すのもいいですが・・・という所ですね。 また仮にスキルがあったとしても、一応サーバー管理者に相談の上で行った方がいいですよ。 一応、ブック単位であれば既にマクロを紹介しているページがあるためご紹介しておきます。 https://www.relief.jp/docs/excel-macro-delete-images.html