このページでは、Excelに取り込んだ写真や画像のシャープネス(シャープ⇔ソフト)を一括で変更できるサンプルコードを紹介します。
明るさやコントラストを変更する次の記事と同じようなコード構成にしていますので、一部説明を省略しているところもあります。ご了承ください。
さて、明るさやコントラストと同様に、シャープネスも図の書式設定やリボンのメニューから変更しようとすると、1枚ずつしか処理できません。
一括で変更したいシーンはあまり多くないとは思いますが、写真に写った文字をくっきりと印字したいときなどはここに掲載しているサンプルコードがお役に立てると思います。
コードをコピペして、シャープネスの度合い、範囲指定する場合はその範囲を指定するだけで簡単に使うことができるので、ぜひ使ってみてください。
サンプルコード(全画像一括処理)
こちらはアクティブシートの画像すべてに処理をするコードです。
範囲を指定して処理したいときはこの次に紹介するコードをご利用ください。
Sub シャープネス一括処理()
'Activeシートすべての画像のシャープネスを変更
'◆◆◆◆◆シャープネスの指定◆◆◆◆◆
Dim EFTValue As Double
EFTValue = 0.5 '(ソフト)-0.5~0.5(シャープ)/中央値0
'=====画像枚数分の処理=====
Dim i1 As Long
For i1 = 1 To ActiveSheet.Shapes.Count
ActiveSheet.Shapes(i1).Select
'シャープネスの変更
Selection.ShapeRange.Fill.PictureEffects _
.Insert(msoEffectSharpenSoften).EffectParameters(1).Value = EFTValue
Next i1
End Sub
サンプルコード(処理範囲指定)
こちらは処理範囲を指定して(絞って)処理をする場合のコードです。
Sub シャープネス一括処理_範囲指定()
'Activeシートのうち指定範囲内の画像のシャープネスを変更
'=====変数宣言=====
Dim EFTValue As Double
Dim ProcRng As Range
'◆◆◆◆◆ユーザー指定部分◆◆◆◆◆
'シャープネスの指定
EFTValue = 0.5 '(ソフト)-0.5~0.5(シャープ)/中央値0
'処理範囲指定
Set ProcRng = ActiveSheet.Range("A1:I13") 'この範囲内の画像のみ処理
'=====範囲内の画像に処理=====
Dim Img As Object
For Each Img In ActiveSheet.Shapes
If Not Intersect(ActiveSheet.Range(Img.TopLeftCell, Img.BottomRightCell), ProcRng) Is Nothing Then
'シャープネスの変更
Img.Fill.PictureEffects.Insert(msoEffectSharpenSoften).EffectParameters(1).Value = EFTValue
End If
Next Img
End Sub
シャープネスの指定方法
シャープネスの度合い(シャープ⇔ソフト)の値は、-0.5~0.5の範囲内で指定できます。
サンプルコードでは、少しでもわかりやすいように、値を「EFTValue」という変数に指定しています。
EFTValue = 0.5
繰り返しになりますが、範囲は-0.5~0.5で、明るさやコントラストが0~1.0であるのに対し、指定範囲が異なるためご注意ください。
なお、-0.5がソフトネス最大値、0は変更なし、0.5がシャープネス最大値になります。
つまり、上の例に示した0.5という値は、シャープネスの最大値になります。
注意点
コードや値の指定方法などは明るさやコントラストの処理とよく似ていますが、シャープネス処理で注意しなければならない点として次の2点があります。
処理後(実行後)は元に戻すことができない
明るさやコントラストは「EFTValue = 0.5(指定範囲が0~1.0のため)」のように値を基準値(中間値)にして実行することで、画像をExcelに取り込んだ時点の状態に戻すことができました。
しかし、シャープネスについては一度処理を施してしまうと、画像をExcelに取り込んだ時点の状態に戻すことはできません。
当然ですが、VBAの処理は「元に戻す」ボタンでも復元させることはできません。
そのため、処理を実行する前はその時点に復元ができるよう、コピーファイル(バックアップファイル)を作ってから実行することをおすすめします。
処理を重ねることができる
「処理後に元に戻すことができない」ということは、処理後の画像に重ねて処理を施せるということでもあります。
あまり繰り返し処理すると画像が原型を留めないほど荒くなるのでご注意ください。
一方で、EFTValueの値を0.5(最大)で処理してもまだ足りない場合は、もう一度実行することで、さらにシャープネスの度合いを強めることができます。
ただし、くどいようですが、仮にEFTValueの値を0.5で処理したあと、-0.5で再度処理をしても、Excelに取得した時点の画像に戻すことはできません。
あくまで処理後の画像を基準としたソフトネス処理が施されるだけで、それはExcelに取得した時点の画像とはまったく違うものとなります。
処理範囲の指定方法
処理範囲は「ProcRng」という変数に指定していて、変更するのは次の赤字の部分です。
Set ProcRng = ActiveSheet.Range(“A1:I13“)
画像の左上の角から、右下の角までがしっかり入るように範囲指定するのがポイントです。
なお、「ActiveSheet.」の部分は、よくわからない方は触らないようにしてください。
詳しくはこちらの記事をご覧ください。
まとめ
明るさ、コントラストに続き、今回はシャープネスの一括処理ができるサンプルコードを記載させていただきました。
明るさ、コントラストのサンプルコードと同じく、ここで紹介したコードはすべて、アクティブシートで実行されるように記述しています。
そのため、処理したいシートが選択されている状態(アクティブになっている)かどうか、しっかりと確認してから実行するようにしてください。
コメント