【Excel】ExcelVBA(マクロ)でキャプチャ画像を自動でシートに貼り付けるツールを作成してみた

ExcelVBA(マクロ)でキャプチャ画像を自動でシートに貼り付ける方法
この記事を読むと・・・
ExcelVBA(マクロ)でキャプチャ画像を自動でシートに貼り付けるツールの作成方法が理解できる
目次

エクセルで画面キャプチャを貼り付けるVBAの作成方法

記載のコードをそのまま使いたい場合は以下の通り設定して下さい。

  1. Microsoft Excel マクロ有効ワークシート (.xlsm)を新規で作成する
  2. 「ScreenCaptureTool.xlsm」という名前で保存する
  3. 記載されているコードをそのまま貼り付ける
  4. 「マクロ実行」と「エビデンス」というシートを作成する
  5. VBAのコードを割り当てるボタンを「マクロ実行」シートに三つ作成する
    ①画面キャプチャを実行する用
    ②キャプチャしたシートを別ブックにエクスポートする用
    ③キャプチャ画像等が記載されたシートの初期化用
  6. ボタンに以下のコードを割り当てる
    ①StartCapture
    ②SaveEvidenceSheet
    ③DeleteAllCells
  7. VBAを設定したエクセルファイルを起動する
  8. マクロの実行を許可する

以下のコードには大きく3種類のコードが記載されています。
①画面キャプチャをシートに貼り付ける処理
②画面キャプチャを貼り付けたシートを別ブックとして保存(エクスポート)する処理
③画面キャプチャを貼り付けていたシートを初期化する処理

'### API関数定義 ###'
Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function CloseClipboard Lib "user32" () As LongPtr
Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As LongPtr

'### 基本情報定義 ###'
Private FileName As String
Private SheetName As String
Private CheckFlag As Boolean
Private BaseCell As Variant
Private LastRow As Long

'### クリップボードリセット ###'
Sub ClearClipboardImage()
    ' クリップボードを開く
    If OpenClipboard(0) <> 0 Then
        ' クリップボードから画像データを削除する
        EmptyClipboard
        ' クリップボードを閉じる
        CloseClipboard
    End If
End Sub

'### 画面キャプチャ開始 ###'
Sub StartCapture()
    MsgBox "画面キャプチャを開始します。"
    Application.OnKey "{ESC}", "StopCapture"
    CheckFlag = True
    ' 画面キャプチャの貼り付け先の情報を定義する
    FileName = "ScreenCaptureTool.xlsm"
    SheetName = "エビデンス"
    ' 画面キャプチャ終了フラグを定義する
    CheckFlag = True
    ' 画面キャプチャ開始時にクリップボードを一旦リセットする
    ClearClipboardImage
    ' 画面キャプチャ開始する
    ExeCaptute
End Sub

'### 画面キャプチャ貼り付け処理 ###'
Sub ExeCaptute()
    ' ESCキーでエラー処理に進む
    On Error GoTo ErrHandler
    
    ' クリップボードにビットマップ形式の画面キャプチャがあれば貼り付けする
    If Application.ClipboardFormats(1) = xlClipboardFormatBitmap Then
        Workbooks(FileName).Sheets(SheetName).Activate
        ' A列の最終行を取得する
        LastRow = Cells(Rows.Count, "A").End(xlUp).row
        ' キャプチャ取得日を貼り付け
        If Not IsEmpty(Workbooks(FileName).Sheets(SheetName).Range("A1")) And Trim(Workbooks(FileName).Sheets(SheetName).Range("A1").Value) <> "" Then
            Cells(LastRow + 58, "A").Value = "【取得日時:" & Now & "】"
            Cells(LastRow + 58, "A").Offset(1, 1).Select
        Else
            Cells(LastRow, "A").Value = "【取得日時:" & Now & "】"
            Cells(LastRow, "A").Offset(1, 1).Select
        End If
        Worksheets(SheetName).Paste
        Application.CutCopyMode = False
        ' 画面キャプチャのクリップボードをリセットする
        ClearClipboardImage
        ' シートに改ページを挿入する
        ActiveSheet.HPageBreaks.Add Before:=Cells(LastRow + 58, "A")
    End If
    ' 次回実行予定時刻を設定(1秒ごとに実行)
    Application.OnTime Now + TimeValue("00:00:01"), "ExeCaptute", , CheckFlag
    Exit Sub

' エラー処理
ErrHandler:
    CheckFlag = False
End Sub

'### 画面キャプチャ停止 ###'
Sub StopCapture()
    If CheckFlag = True Then
        CheckFlag = False
        Application.OnKey "{ESC}", ""
        MsgBox "画面キャプチャを停止します。"
    End If
End Sub

Sub DeleteAllCells()
    ' 「エビデンス」シートのすべてのデータとオブジェクトを削除する
    ThisWorkbook.Sheets("エビデンス").Cells.ClearContents
    ThisWorkbook.Sheets("エビデンス").DrawingObjects.Delete
    MsgBox "「エビデンス」シートをリセットしました。"
End Sub

Sub SaveEvidenceSheet()
    ' 保存時刻を取得
    Dim SaveTime As String
    SaveTime = Format(Now, "yyyymmdd_hhnnss")
    '名前をつけて保存
    Dim Save_File As Variant
    Save_File = Application.GetSaveAsFilename(InitialFileName:="作業エビデンス_" & SaveTime, _
    FileFilter:="Excelファイル,*.xlsx,すべてのファイル,*.*")
    ' キャンセルされた場合の処理
    If Save_File = False Then
        MsgBox "ファイルの保存をキャンセルしました。", vbInformation, "キャンセル"
        Exit Sub
    End If
    ' 既存のファイルを上書きするかしないかの判定
    If Dir(Save_File) <> "" Then
        msg = "同じ名前のファイルが他に存在します。上書きしますか?"
    If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
        ' メッセージ表示オフ
        Application.DisplayAlerts = False
    End If
    ' シートのコピー、ファイル保存
    Sheets("エビデンス").Copy
    ActiveWorkbook.SaveAs FileName:=Save_File, FileFormat:=xlOpenXMLWorkbook
    ' ファイルを閉じる
    ActiveWorkbook.Close
End Sub

ファイル名やシート名などを自分好みに変更したい場合は、
ファイル名「ScreenCaptureTool.xlsm」、シート名「エビデンス」となっている部分を任意の名前に変更してください。

ダウンロード

マクロが組み込まれたファイルをダウンロードしてもOKな環境の方は、すでに作成済みのファイルがあるので、以下のリンクからダウンロードすればそのまま使用できます。
※エクセルのバージョンなどによって上手く動作しない可能性がありますので使用は自己責任でお願いします。

ダウンロード

使用手順

作成済みのファイルを参考に使用方法を解説します。

STEP
エクセルを開く

ScreenCaptureTool.xlsmを開き、『コンテンツの有効化』をクリックします。
※マクロを有効化します

vba有効化
STEP
画面キャプチャを開始する

「マクロ実行」シートにある『キャプチャ開始』のボタンをクリックします。
※開始されると「画面キャプチャを開始します。」のメッセージが表示されます。

キャプチャ開始ボタン
画面キャプチャ開始メッセージ
STEP
画面をキャプチャする

『Print Screen』ボタンを押下し、画面キャプチャを取得します。
画面キャプチャが取得される度に、取得日時と画面キャプチャが「エビデンス」シートに貼り付けられます。

画面キャプチャ画像
STEP
画面キャプチャを終了する

『Esc』キーを押下し、画面キャプチャを終了します。
※停止されると「画面キャプチャを停止します。」のメッセージが表示されます。

画面キャプチャ停止メッセージ
STEP
エビデンスシートを別ブックで保存する

『エビデンスシートを別ブックで保存する』をクリックします。
保存先とファイル名を指定する画面が表示されるので任意の名前、場所を設定し、保存してください。

STEP
エビデンスシートをリセットする

別ブックにエビデンスが保存されたことを確認後、『エビデンスシートをリセットする』をクリックし、エビデンスシートを初期化します。
※リセットされると”「エビデンス」シートをリセットしました”のメッセージが表示されます。

エビデンスシートリセットボタン
エビデンスシートリセットメッセージ
よかったらシェアしてね!
  • URLをコピーしました!
目次