ナナミのブロマガ

Excelマクロ作成しました(VBA)。#001_画像オートシェイプを色反転する(おまけ:画像削除処理付き)

2015/10/15 02:45 投稿

  • タグ:
  • Excel
  • エクセル
  • マクロ
  • VBA
ウォンチュー!!(`・ω★)ゞ
ナナミです。

仕事などでこういったものもたまに作るのですが、その中で汎用性の高そうなものを紹介しようかと思います。

今回紹介するのはExcelファイル内の画像オートシェイプを色反転するマクロです。
ダウンロードはこちらから
ソースはこちらの記事に公開しています。
ダウンロードファイル名:画像色反転.zip
[内包物]
  • 画像色反転.xlsm
  • ReversePictureColor.vbs
  • 【注意事項】.txt
大量に画像を貼り付けたExcelファイルを印刷したい時、画像に黒系色が多い場合にカラーインクを節約する為、色反転してから印刷したい、といった時などに活用できます。
Excel内で作成した図形等は如何様にもできるのですが、外部から挿入した画像オートシェイプは残念ながらExcelでは色反転できません。
そこで、このマクロでは「ペイント」の力を借りて色反転させています。
簡潔なフローチャートを以下に示します。



処理内容をざっくり書くとこんな感じです。
処理内容
  1. 最初に各種処理開始チェックを行い、OKであればExcel上の画像オートシェイプを切り取ります。
  2. 次にVBSを経由してペイントを起動し、画像の貼り付け・色反転・切り取りまでを行います
  3. ペイントにて色反転した画像をExcelに貼り付け、最後にペイントを終了して処理完了です。
「画像色反転.xlsm」を開けば分かりますが、「全シート用」と「アクティブシート用」の2種類用意しています。
また、おまけとして「画像オートシェイプの削除」処理も同ファイルに実装しています(処理フローは至極単純な為省略します)。
こちらも同じく「全シート用」と「アクティブシート用」の2種類用意しています。



実際に処理を実行すると以下のようになります。





但し、このマクロを使用するにあたりいくつか注意点があります。
1.VBSファイルについて
 VBSファイルはペイント起動の際に使用しています。ファイル名を処理の中で判定や実行時に使用している為、ファイル名を変更しないで下さい
 また、実行フォルダパスはマクロ実行ファイルと同じディレクトリとしていますので、「画像色反転.xlsm」と同じフォルダに入れておいて下さい
 VBAが分かる方ならば好きに変更して頂いて構いません。そんなに難しいコードは組んでいませんので。


2.色反転後のファイルサイズについて
 色反転を実行すると、画像の拡張子によっては画像ファイルサイズが大きくなることがあります。「画像色反転.xlsm」にはJpeg画像ファイルを3枚挿入していますが、色反転前後でこれだけ違ってきます。



 ペイントの仕様なのか分かりませんが、色反転すると画像サイズが変動するみたいです。
(・・;)
 なので、色反転後は極力上書き保存はしないことをお薦めします。「名前を付けて保存」であれば問題ありません。


3.処理が失敗する場合について
 私の環境では現バージョンで問題ありませんでしたが、マシンスペックが足りなかったり、画面サイズが大き過ぎたりすると、VBAエラーが発生する場合があるようです。その際はVBA又はVBSコードにSleep関数を追記、又は既に挿入されているSleep関数を編集して下さい。
 Sleep関数というのは、一言で言うとマクロ処理を指定した時間(ミリ秒単位)だけ待機させる関数です。以下のようにコード内に挿入します。

VBAの場合:Call Sleep(300)



VBSの場合:Wscript Sleep 300



 VBAの場合は、この他に事前にSleep関数の宣言が必要なんですが、このファイルのコードには既に記載済の為、省略します。
 今回VBAエラーが発生しやすい処理としては以下が多いようです。なので、その処理の直後にSleep関数を挿入し、時間調整してみて下さい。
※何秒待機させるべきかは個人差がありますので、各々で適切な時間に調整して下さい。
①ペイントの起動
②画像の切り取り
③画像の貼り付け

ダウンロードファイル中の「【注意事項】.txt」にも同じ事が記載されています。



以上です。
あまり使う機会は無いかもしれませんが、こういうのは探しても見つからなかったので、お役に立てれば幸いです。
ではでは~ ヾ(^▽^)

--------------------------------------
参考にさせて頂いたWebページ:
ClockAhead 開発Blog-Task.Existsが役に立たないときのための代替方法
http://blog.clockahead.com/2012/08/taskexists.html

コメント

コメントはまだありません
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事