No.013
フォルダー内のすべての画像ファイルをペイントで開きサイズ変更
2003/2007/2010/2013
フォルダーに入っている画像ファイルを、すべて同じサイズに変更するようなことになりました。
サイズ変更の簡単なところでは、ペイントで[サイズ変更と傾斜]ダイアログ ボックスを表示して設定することができますが、画像ファイルが多数となると大変です。
そこで、VBAでできないものかと思い試作してみました。
ペイントを操作するときにキー操作のみで行う様子を、ExcelのVBAにしてみたものです。
画像ファイルをペイントで開いた状態で、例えばピクセル単位でのサイズ変更(水平方向のみ数値指定、縦横比維持)を行い保存して閉じるには、次のようなキー操作で実施できます。
「Alt」、「H」 または 「Alt」+「H」 …アクセス キー
「R」「E」 …アクセス キー、これで[サイズ変更と傾斜]ダイアログ ボックスを表示
「↓」 …これで[ピクセル]オプションの指定
「Tab」 …移動
[水平]ボックスの数値設定
「Enter」 …ダイアログ ボックス確定
「Alt」+「F4」 …ペイント閉じる
「Enter」 …保存する
それでは早速ですが、フォルダー内のすべての画像ファイル(.png)を、ピクセル単位で縦横比を保ち幅300pxでサイズ変更を行う記述です。
Sub Sample()
Dim myFile As String, myPath As String
Dim suihei As Integer '幅(水平方向)の設定値
myPath = "D:¥test¥" '画像の入っているフォルダー
myFile = Dir(myPath & "*.png") 'pngファイルを取得
suihei = 300
Do While Len(myFile) > 0
Shell "C:¥Windows¥system32¥mspaint.exe" & " """ & myPath & myFile & "", vbNormalFocus
Application.Wait Now + TimeValue("0:00:02") '2秒待つ
SendKeys "%H" 'Alt+H(アクセス キー)
SendKeys "RE" 'R、E(アクセス キー)
SendKeys "{DOWN}" '↓ [ピクセル]オプション選択
Application.Wait Now + TimeValue("0:00:01")
SendKeys "{TAB}" 'Tab
SendKeys suihei '水平設定
SendKeys "{Enter}" 'ダイアログ ボックス確定
SendKeys "%{F4}" 'アプリ終了 Alt+F4
SendKeys "{Enter}" '保存確定"
myFile = Dir()
Loop
SendKeys "{NUMLOCK}"
MsgBox "完了"
End Sub
実行すると、1つずつ画像ファイルが開き、ゆっくりと処理されていきます。
では、上記の記述についてですが、詳細は別ページでご確認ください。
キー操作を記述しているSendKeysステートメントについては、Excel VBAのヘルプ「InputBox のテキスト ボックス入力時に日本語入力をオンにする」の<ヘルプmemo>をご参照ください。
順序が逆になりましたが、フォルダー内のファイルすべてを操作するのは、ヘルプ「フォルダー内のすべてブックを開いて同じ処理を行う 《Do~Loop・Dir》」をご確認ください。
また、ペイントで画像ファイルを開くのは Shell関数を使用、また、ペイントの動作を待ってやるために使用する Waitメソッド は次のヘルプ「アプリケーションを起動し動作させる 《Shell・SendKeys・Wait》」の<ヘルプmemo>にありますのでご参照ください。
1点補足ですが、最後の「完了」メッセージの前に、SendKeysステートメントで「NumLock」キーを押すようにしています。
実は、SendKeysステートメントを続けて使用すると(組み合わせにもよるようです)、オンであった「NumLock」キーが外れるというバグがあり、今回のサンプルを実行すると外れます。
そこで「NumLock」キーをオンにするために入れている記述です。
通常PCで「NumLock」キーをオフにされている場合は、最後から3行目の
SendKeys "{NUMLOCK}"
をコメントにするか削除してご利用ください。
さて実際、ペイントの[サイズ変更と傾斜]ダイアログ ボックスのサイズ変更の設定では、次の4つのパターンがあります。
また、画像ファイルもいろいろな種類があります。
- 単位ピクセル/縦横比維持する
- 単位ピクセル/縦横比維持しない
- 単位パーセント/縦横比維持する
- 単位パーセント/縦横比維持しない
これらをすべて網羅しサイズ変更を実行できるサンプルファイルを用意しました。
次のリンクをクリックしダウンロードしてご利用ください。
ダウンロードいただいたファイルの説明を少しさせていただきます。
まず最初にお断りですが、今回のプログラムはとても素朴なもので、動作としては1画像3秒程度かかり、対象画像のペイントの画面が前面に表示され、一時的に待ち(止まり)ながら動作します。(スマートな動作状況ではありません)
ネットでは、画像サイズ変更のこういったサンプルはほぼないようでしたので、今回掲載に至りました。
待てない方はフリーソフト、別の方法をご利用ください。
さて、Excelのシートの色つきセルに設定をしてからボタンをクリックして実行します。
詳しくはシートに説明がありますので、よく確認して実施してください。
特に注意点としては、画像ファイルはサイズ変更後上書き保存されますので、バックアップしてからの実行をおすすめします。
こちらでは何度も動作確認をしておりますが、画像の容量やPCのスペックやなんらかのタイミングにより、失敗するケースがあるかもしれません。
実施後は、変更されたサイズをざっくり確認するようにしてください。
このページでご紹介した記述は、ダウンロードいただいたブックで「Alt」+「F11」を押して VBE を開き、左の階層構造(プロジェクト エクスプローラー)の「Module2」にあります。