こんにちは、しらすです。
SIの仕事をしているとしばしば発生する業務、「スクリーンショットを取ってエクセルに張り付けるという作業を延々と繰り返す」という作業、しばらく「スクショボタンを押す」→「エクセルに移動」→「エクセルに貼付」→「サイズ修正」を画面ごとに行っていたんですが、、、、
エクセルに貼付、サイズ修正めんどくさすぎる!!
ということで、これらの作業をマクロに登録してボタン一つでサクサクできるようにしよう!ということでマクロ作成しました。
スクリーンショット取得用エクセルマクロ(全体)
早速マクロを公開します。
'キーボードイベント用のライブラリ読み込み
Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long _
)
'スクショ貼付用関数
Sub captureAndPast()
'プリントスクリーン押下
keybd_event vbKeySnapshot, 0, &H1, 0
keybd_event vbKeySnapshot, 0, &H1 Or &H2, 0
'貼付
ActiveSheet.Paste Destination:=ActiveCell
'トリミング
Selection.ShapeRange.PictureFormat.CropRight = 1440
Selection.ShapeRange.PictureFormat.CropBottom = 30
'加工後のスクショをコピー
Selection.Copy
'元画像を削除
Selection.Delete
'コピーした画像を図として貼り付け(トリミング領域の削除)
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
'画像サイズ変更
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Width = 700
Selection.ShapeRange.Height = 350
'最背面に移動
Selection.ShapeRange.ZOrder msoSendToBack
'アクティブセルを移動
ActiveCell.Offset(27, 0).Select
End Sub
それぞれのコードを簡単に説明
プリントスクリーンを押して貼り付け
'キーボードイベント用のライブラリ読み込み
Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long _
)
プリントスクリーンを押下するために、キーボードイベント用のライブラリをインポートします。
'プリントスクリーン押下
keybd_event vbKeySnapshot, 0, &H1, 0
keybd_event vbKeySnapshot, 0, &H1 Or &H2, 0
プリントスクリーンを押下する際ですが、一行目で押下、二行目でキーを離す、という2つのイベントを入力することでプリントスクリーンをクリップボードにコピーします。
クリップボードの画像を貼り付け→トリミング
'貼付
ActiveSheet.Paste Destination:=ActiveCell
'トリミング
Selection.ShapeRange.PictureFormat.CropRight = 1440
Selection.ShapeRange.PictureFormat.CropBottom = 30
クリップボードにコピーした画像をエクセルに貼り付け、トリミングを行います。トリミング領域はご自分の環境に合わせて修正してください(上記は左側1440px, 下30pxを削除しています)。
トリミング領域の削除
'加工後のスクショをコピー
Selection.Copy
'元画像を削除
Selection.Delete
'コピーした画像を図として貼り付け(トリミング領域の削除)
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
トリミングしただけだと、トリミング部分が残っているので、エビデンスのファイルサイズが異常に大きくなったり削除領域に機密情報が入っていたりすると困るので、トリミング領域は削除します。
しかし、マクロで直接トリミング領域を削除することはできないので、加工後の画像を改めて図として貼り付けることで対応しています。元画像は削除します。
画像のサイズ修正、最背面に移動
'画像サイズ変更
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Width = 700
Selection.ShapeRange.Height = 350
'最背面に移動
Selection.ShapeRange.ZOrder msoSendToBack
画像サイズの縦横比の固定を解除し、縦横サイズをそれぞれ指定します。
※1. 私の環境では、エクセルページの拡大率によって貼り付け時のサイズも縦横比もなぜか変わってしまう状況でした。そのため、縦横サイズをどちらも指定することでエビデンスのサイズをそろえました
※2. 図として貼り付け後の画像は縦横比が固定されています。そのため、縦横比の固定を一度解除してから縦横サイズを指定する必要があります
最背面に移動しておくと、色々張り直しなどがあったときに便利ですので入れました。
セルを移動する
'アクティブセルを移動
ActiveCell.Offset(27, 0).Select
次の貼り付け位置にセルを移動します。これにより、貼り付け位置をわざわざ動かさなくても一定の間隔でどんどん貼り付けできるようになります。移動量は27セル分としていますが、環境に合わせて変更ください。
作成したマクロをショートカットに登録
こちらで作ったマクロをショートカットに割り当てておけば、クリック一つでどんどんエビデンスが取得可能です。ショートカットへの割り当ては以下の手順を参照ください。
開発タブからマクロを選択します。
作成したマクロを選択し、オプションをクリックします。
ショートカットキーに好きなショートカットを割り当てましょう。私は片手で作業できるように”q”を割り当てています。
まとめ
本ブログではPC画面をエクセルに貼り付け、エビデンスを取得するマクロについて紹介させていただきました。そもそもエビデンスをエクセルに貼り付ける、という作業は単純作業でとても大変です。SIerとして働く方々の中には日々この業務を行い、非常に疲れている方も多いかと思いますが、このブログがほんの少しでも日々の作業を楽にする一助になれば幸いです。
エビデンスのエクセルを複数取る!エクセルにマクロを直接書き込めない!という方へ
エビデンスのエクセルをいくつも作らないといけないのにいちいちマクロ登録してられない!
エビデンス用のエクセルシートにマクロを登録できない!
という人は、PERSONAL.XLSBを作成してそちらにマクロを登録してください。登録方法は別途紹介したいと思います。
コメント