エクセル VBAでスクリーンショットを取る方法!

キーボード自動化

エクセル上で操作の記録として画面をスクリーンショット(切り取り)して自動で保存したい場合、エクセルのVBA(Visual Basic for Applications)を使用すれば、簡単にスクリーンショットを取得することができます。

これは、作業内容の記録やレポート作成に役立つ方法です。

VBAでキーボードの自動化する場合、WindwsAPIのキーボードイベントのコードを利用します。今回、プリントスクリーンを行うプログラムのサンプルコードを紹介します。

基本 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を使用してスクリーンショットを簡単に取得する方法でした。作業の記録や報告書作成に役立てて、効率的な業務をサポートしましょう。

改善効果・利用頻度

改善効果
シェアしてくれるとうれしいです!
YU SAKURAI
YU SAKURAI
ABOUT この記事を書いた人
北海道在住の社内SE 日々の業務を通じてITの世界に貢献しています。新しいガジェットやサービスに対する情熱が止まらず、最新のテクノロジーを探求するのが趣味、仕事をより効率的に改善する方法を探し続け、その成果やアイデアをブログで共有しています。ITとテクノロジーの世界で新たな発見や学びを共に楽しんでいきたいです。