LoginSignup
2
0

More than 1 year has passed since last update.

【VBA】エビデンスをエクセルに貼り付けるマクロ作ってみた。

Last updated at Posted at 2021-07-10

はじめに

テストの時とか、一枚一枚キャプチャ撮ってエクセルぺたぺたするのが面倒くさくなり、
マクロ勉強ついでにエビデンスまとめる関数を作ってみました。


エビデンスまとめ

使い方
・VBAを組み込むエクセルのA1に保存したいファイル名を入力
・エビデンスをPrintScreen等で取得し、一箇所のフォルダにまとめておく
 →取得方法は何でも良い
  自分はプリントスクリーンの保存場所をエクセルと同じ階層の
  imagesフォルダに格納させるようにしました。
・エビデンスが保存し終わったら、関数実行してD3に入力したファイル名で、エビデンスがまとまったファイルを作成
 →ボタンに関数埋め込んだりすると使いやすい。ショートカット登録でも良いかも

Sub evidence()
Dim lngTop As Long              ' 画像貼り付け位置
Dim objFile As Object
Dim objFldr As FileSystemObject
Dim newBookName As String       ' 新しいブック名
Dim newBookPath As String       ' 格納先
Dim newBook     As Workbook     ' 新しいブック
Dim cpSheesName As String       ' コピー元のシート名
Dim cpShees     As Worksheet    ' コピーしたシート

    ' 新しいブック名、フルパスを先に保持
    newBookName = ActiveSheet.Range("A1").Value & ".xlsx"
    newBookPath = ThisWorkbook.Path & "\" & newBookName

    ' 新しいブックを作成するファイルが作成済かどうか確認
    If Dir(newBookPath) = "" Then
        ' 新しいシート作成
        Sheets.Add After:=Sheets(Sheets.Count)
        ' シート名変更
        Sheets(Sheets.Count).Name = "ファイル" & Sheets.Count - 1

        ' インスタンス生成
        Set objFldr = CreateObject("Scripting.FileSystemObject")

        lngTop = 10 '初期貼り付け位置
        ' キャプチャ貼付
        For Each objFile In objFldr.GetFolder(ThisWorkbook.Path & "\images").Files
            ActiveSheet.Shapes.AddPicture _
                    Filename:=objFile, _
                    LinkToFile:=False, _
                    SaveWithDocument:=True, _
                    Left:=20, _
                    Top:=lngTop, _
                    Width:=650, _
                    Height:=400

            lngTop = lngTop + 400 + 10
        Next

        cpSheesName = Worksheets(Worksheets.Count).Name

        ' ファイルがない場合は、新しくブック作成
        Set newBook = Workbooks.Add
        ' シート移動
        ThisWorkbook.Worksheets(cpSheesName).Move before:=ActiveWorkbook.Sheets(1)
        Set cpShees = ActiveSheet
        cpShees.Name = "エビデンス"

        ' 不要なシート削除
        Application.DisplayAlerts = False
        Worksheets("Sheet1").Delete
        Application.DisplayAlerts = True

        ' 新しいブックをVBAを実行したファイルと同じフォルダに保存
        newBook.SaveAs newBookPath
        ActiveWorkbook.Close

        ' 貼り付けた画像を削除
        objFldr.DeleteFile (ThisWorkbook.Path & "\images")
        Set objFldr = Nothing
    Else
        ' 既にファイルが存在する場合は、メッセージを表示して保存はしない
        MsgBox ("既に" & newBookName & "というファイルは存在します。")
    End If

    ' マクロのシートに戻って終了
    Sheets("マクロ").Select
End Sub

'おまけ
Sub sheetDel()
    Dim mySht As Worksheet
    With Application
        ' 警告や確認のメッセージを非表示に設定
        .DisplayAlerts = False
        ' シート名をチェックして、アクティブシートでなければ削除
        For Each mySht In Worksheets
            If mySht.Name <> "マクロ" Then mySht.Delete
        Next
        '設定を元に戻す
        .DisplayAlerts = True
    End With
End Sub

解説

解説は気が向いたら。。。

おわりに

とりあえず動くものは作れたけど、
もっとコンパクトにわかりやすくしたいなーと思いました。
すぐ試せるのも楽しいですね。
まだまだ勉強しなければっ

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0