エクセル上で操作の記録として画面をスクリーンショット(切り取り)して自動で保存したい場合、エクセルのVBA(Visual Basic for Applications)を使用すれば、簡単にスクリーンショットを取得することができます。
これは、作業内容の記録やレポート作成に役立つ方法です。
VBAでキーボードの自動化する場合、WindwsAPIのキーボードイベントのコードを利用します。今回、プリントスクリーンを行うプログラムのサンプルコードを紹介します。
Table of Contents
基本 Windows上でプリントスクリーンを行う場合
最初にプリントスクリーン基本をおさらいします。プリントスクリーンをキーボードで行う場合のキーの入力方法は下の通りです。
- 「PrtSc (PrintScreen)」 全画面 クリップボード
- 「Alt」+「PrtSc (PrintScreen)」 ウィンドのみ クリップボード
- 「Windows」 +「PrtSc (Print Screen)」 全画面 ピクチャーフォルダに保存
- 「Windows」 + 「Alt」 +「 PrtSc (PrintScreen)」 ウィンドゥ ピクチャーフォルダに保存
※ノートパソコンの場合、機種によっては「Fn」キーを押しながら「PrtSc (Printscreen)」 の場合もあります。
VBAのキーボードイベント仕様
詳細は下記サイト参照してください。
Microsoftドキュメント
https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-keybd_event
keybd_event ( bvk,bcan,dwflags,dwextraInfo )
bvkはkeycode
bcanは常に0にする
dwflags 0にするとキーを押す 2でキーを放す
dwExtraInfo 常に0にする
VBAで使用する時に下のように宣言します。
Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long _
)
例 プリントスクリーンのキーボードを自動化する時は下記になります。
Print Screenキーを押す処理
keybd_event &H2C, 0, 0, 0& 'Print screen
Print Screen キーを戻す処理
keybd_event &H2C, 0, 2, 0&'Print screen
プリントスクリーン各種のVBAコードサンプル
PrtSc (Printscreen)」全画面 クリップボード
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 全画面()
keybd_event &H2C, 0, 0, 0& 'Print screen押す
keybd_event &H2C, 0, 2, 0& 'Print screen上げる
End Sub
「Alt」+「PrtSc (PrintScreen)」ウィンドのみ クリップボード
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 Sample1()
keybd_event &H12, 0, 0, 0& 'Altキー押す
keybd_event &H2C, 0, 0, 0& 'Print screen押す
keybd_event &H12, 0, 2, 0& 'Altキー上げる
keybd_event &H2C, 0, 2, 0& 'Print screen上げる
End Sub
「Windows」 +「PrtSc (Print Screen)」 全画面 ピクチャーフォルダに保存
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 Sample1()
keybd_event &H5B, 0, 0, 0& 'Windowsキー押す
keybd_event &H2C, 0, 0, 0& 'Print screen押す
keybd_event &H5B, 0, 2, 0& 'Windowsキー上げる
keybd_event &H2C, 0, 2, 0& 'Print screen上げる
End Sub
「Windows」 + 「Alt」 +「 PrtSc (PrintScreen)」 ウィンドゥ ピクチャーフォルダに保存
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 Sample1()
keybd_event &H5B, 0, 0, 0& 'Windowsキー押す
keybd_event &H12, 0, 0, 0& 'Altキー押す
keybd_event &H2C, 0, 0, 0& 'Print screen押す
keybd_event &H5B, 0, 2, 0& 'Windowsキー押す
keybd_event &H12, 0, 2, 0& 'Altキー押す
keybd_event &H2C, 0, 2, 0& 'Print screen押す
End Sub
さいごに
今回、プリントスクリーンに焦点を当ててますが、エクセル上でキーボード関連の自動化する際に必要な知識としても役に立ちますので、今回の記事が参考になれば幸いです。
以上で、エクセル VBAを使用してスクリーンショットを簡単に取得する方法でした。作業の記録や報告書作成に役立てて、効率的な業務をサポートしましょう。
改善効果・利用頻度