Office2007からエクセルに備わっている画像トリミング機能を使用して、複数ファイルをまとめてトリミングするマクロを作成しました。エクセルに画像トリミング機能が備わっていない場合は、数値を直接入力してもらって、画像に適応させて、調節可能としました。
2024/5/7に問い合わせをいただいたので、追記します。Online Excelでエクセルマクロは動作しませんので、ご注意ください。Windows PC上で動作するエクセルで起動してください。Macやスマホ、タブレット(windowsタブレットを除く)では、起動できません。
入力フォルダ配下にある全画像ファイルを出力フォルダ配下に同じファイル名でトリミングした画像を保存します。
画像ファイルとして認識可能なのは、「JPEG」(.jpg/.jpeg),「PNG」(.png),「BMP」(.bmp),「GIF」(.gif)になります。
入力先フォルダを指定すると、「ファイルリスト」シートに対処にできる画像ファイル一覧が表示され、トップ画像が、右側に表示されます。
出力先フォルダも指定します。注意※ 保存されない場合があるという問い合わせがありました。出力フォルダパスとファイル名を合わせて256文字以内で使用してください。また、確認環境はWindowsです。Macでは、画像を開く処理や保存処理をMacの仕様に合わせる必要があります。
Office2007以降のエクセルの場合、右に表示された画像に対して、エクセルのトリミング機能を使用して、トリミングします。画像を選択して、右クリックすると、トリミング機能を呼び出せます。下の画像は、エクセルをスクリーンショットした画像をマクロファイル内で表示させています。スタイルの隣に表示されているトリミングを選択します。
画像のコーナーや辺の中央にカーソルを合わせてカーソルがトリミングアイコンになったことを確認してからドラッグしてください。(コーナーであれば、ほんの少し内側にカーソルを合わせると「マークが表示されます。)
この状態で、画像の上にある「カットサイズ取得」ボタンを押すと、カットされたサイズが左下に設定されます。
エクセルにトリミング機能が備わっていない場合は、セルに直接カットサイズの数値を入力して、カットサイズ下にある「カットサイズを画像に反映」ボタンをクリックすることで、右に表示されている画像にトリミング後の画像イメージを表示させることができます。
画像の上にある「この画像を保存」をクリックすると、表示中の画像単体を出力先フォルダへ保存し、ファイルリストから外します。
他の画像にこのカットサイズを適応したときの見た目を確認する場合は、「次の画像表示」ボタンをクリックします。新しい画像はカットサイズに合わせて、トリミング後の画像イメージが表示されます。画像が表示される順序は、ファイルリストの上から順番になります。
ファイルリスト内に不要なファイルが含まれていて、表示中の画像が不要な場合は、「この画像は除外」ボタンをクリックすることで、ファイルリストから削除します。不要ファイルが複数ある場合は、「ファイルリスト」シートから直接行削除することでも対応可能です。
表示されている画像のトリミング後の画像に対して、カット前の画像に戻して再調整を行いたい場合は、「カットサイズリセット」ボタンをクリックすることで、カット前の画像を表示させることが可能です。この場合、保存されていたカットサイズはリセットされるため、保存されているカットサイズが不要な場合にだけ使用してください。
カットサイズと適応させるファイルが確定したら、「全画像をトリミング」ボタンをクリックすることで、ファイルリスト内の画像を出力先フォルダへまとめて保存できます。
ファイルリストの表示順位は、エクセルの文字列ソートではなく、エクスプローラに使用される数字を認識してソートする方式を採用しています。画像をまとめて同じようにトリミングする場合、ファイル名に数値を入れて順番を意識することが多いためこの方法にしました。
下記からダウンロードしたエクセルファイルを起動し、コンテンツの有効化を行う。
2024/5に問い合わせいただいた為、補足を追記します。Windows PCにインストールされているExcelで起動してください。Htmlで起動する場合は、Online Excelで起動しており、マクロは動作できません。
マクロの有効化手順については、こちらも参考にしてください。
2025/2/28追記 拡張子が大文字の場合への対処を追加しました。
複数画像をまとめてトリミングするエクセルマクロファイル(xlsm)のダウンロード
問い合わせがあり調べてみました。MicrosoftがExcelのVBAに対して提供している図の保存処理は、解像度92dpiでの保存となります。Microsoft Publisherには、300dpiの画像保存が提供されていますので、高解像度の画像処理は、ExcelやWordではなく、Publisherを使用してほしいのだと思います。MicrosoftのVBAページより。
Publisherは、広告やポスター作成向けのソフトウェア(アプリ)のようですが、Publisherを使用したことがある人の方が少ないと思います。なので、強引にエクセルで高解像度写真(図)の保存処理ができないかを頑張ってみました。
エクセルのオプションの詳細設定には、「ファイル内のイメージを圧縮しない」設定と、既定の解像度を「高品質」に設定することで、ユーザが高品質画像をエクセルで扱うことは可能です。
ユーザがエクセルに高品質の画像を貼り付けることは可能であり、右クリックしてメニューから「図として保存」を選択して、品質を保持したまま画像ファイルとして保存することは可能なので、マクロからSendKeysという命令を使用して、疑似的にユーザが操作しているような動きをさせることで対処しました。
この方法は、PC上の画面遷移とマクロ内のキー入力による保存命令にずれが生じると保存に失敗する場合があります。失敗した場合、図を保存するためのダイアログが表示された状態で、動作が止ります。マクロ側もダイアログが閉じるのを待ってから次に進むように処置しているため、一度図の保存に失敗しても、正しく操作を行えば、マクロが再開して画像の保存を継続させることは可能です。一応、こちらでは、Excel 365とExcel 2021で動作確認を行っています。
上記の画面で、停止してしまう場合は、①はそのまま気にせず、②に「Ctrl+V」で貼り付けを実行してみてください。マクロの中でクリップボードにファイルの全パスを登録しています。そのため、保存フォルダパスを含めたファイル名を②に指定することで、①の位置は関係なく、保存したい箇所に画像の保存が可能です。
クリップボードからファイルパスが取得できない場合は、そのままキャンセルしてください。(貼り付けが面倒であれば、キャンセルでも構いません。)
キャンセルを選んだ場合、マクロの中で保存されなかったことを検出して、再度「図として保存」の命令を再実行します。1画像につき、2度保存に失敗すると、マクロは次の処理に移行します。
マクロ側で保存の失敗を検出した場合に2度目の保存リカバリー処置を入れている関係上、稀に、保存処理とファイルの存在有無確認処理に行き違いが発生します。意図せず、上書きしますか?のダイアログが表示された場合は、「はい」ボタンを押してください。
高解像度の保存にこだわらない方は、通常版をダウンロードしてください。こちらは、失敗する場合もあることをご理解ください。
高解像度版の注意事項をあらかじめ確認してください。
マクロの有効化手順については、こちらも参考にしてください。