【ダウンロード】0.1 まずはこのExcelマクロテンプレートから始めてみよう!

目次

当サイトの運営者 overdoser謹製のExcelマクロのテンプレートを差し上げます!

これまでに約100本の実際の業務で使用するExcelマクロを開発してきましたが、Excelマクロを開発する度に一からExcelマクロを作成することが非効率なことに気付き、これまでに作成してきたExcelマクロのいいとこどりをした、overdoser謹製のExcelマクロのテンプレートファイルを作成しましたので、皆様に無料で差し上げます

ファイルのダウンロード~マクロの実行までの手順

  • まず最初に、以下のボタンよりExcelマクロ作成用テンプレートマクロのZIPファイルをダウンロードしてください。
  • 任意のフォルダで、ダウンロードしたZIPファイルを解凍してください。

  • 解凍後、「Excelマクロ作成用テンプレートマクロ」というフォルダが作成され、その配下に「Excelマクロ作成用テンプレートマクロ.xlsm」というファイルが格納されています。

  • この「Excelマクロ作成用テンプレートマクロ.xlsm」というファイルを開くと、マクロファイルのワークシートが表示されます。

  • なお、Excel上に以下のようなセキュリティの警告が表示された場合は、「コンテンツの有効化」のボタンをクリックしてください。
セキュリティの警告

マクロの解説

マクロファイルを開くと、以下のようなワークシートが表示されます。

テンプレートマクロのワークシート

一般的な業務で使用するマクロは、入力ファイルを読み込み、マクロで何らかの編集を行って、出力ファイルを作成するというのが、経験上非常に多いため、それに特化した作りとなっています。

このテンプレートマクロの仕様は以下の通りです。

  1. 入力ファイルのExcelファイルを開き、その1シート目をコピーして新規のワークブックを生成する。
  2. そのワークブックを出力ファイルのネーミングルールに従ってファイル名を命名し、出力フォルダに保存する。
  3. 入力ファイルを保存せずに閉じる。

このワークシートの各部品について、上から説明していきます。

  • 入力ファイルの指定方法は、以下のいずれかで設定可能です。
  1. E3セルに設置しているファイル選択ボタンをクリックすると、ファイル選択ウィンドウが表示されるので、そこでファイルを選択すると、C3セルのファイル名、D3セルのフォルダのフルパスに値が反映されます。

  2. C3セルのファイル名、D3セルのフォルダのフルパスを直接編集することも可能です。
  • 出力ファイルの指定方法も入力ファイルと同等ですが、今回のマクロの仕様は出力ファイルに関しては出力フォルダのみを設定可能としているため(出力ファイル名は、マクロが自動的に命名する)、フォルダ選択ボタンか、D4セルのフォルダのフルパスの直接編集を行うことになります。
  • ZIPファイルのフォルダ構成は以下のようになっており、これに従って入力ファイル、出力フォルダを指定しても構わないですし、自分で用意した入力ファイル、出力フォルダを使用しても構いません。
フォルダ構成図

このマクロの実行方法は以下の通りです。

  • マクロ実行ボタンをクリックすると処理が実行され、マクロが正常に処理された場合は、以下のダイアログ画面が表示されます。
ダイアログ画面

マクロのソースコード

以下にマクロのソースコードを掲載しますが、難しいことをしているわけではありませんので、解説は割愛させていただきます。

Option Explicit

Dim ws_macro As Worksheet

Sub initialize()

    Set ws_macro = ThisWorkbook.Worksheets("Excelマクロ作成用テンプレートマクロ")

End Sub

Sub select_inputfile()

    Dim str_filepath As String

    Call initialize

    With Application.FileDialog(msoFileDialogFilePicker)
        .Filters.Clear
        .Filters.Add "Excelファイル", "*.xls*"
        .AllowMultiSelect = False
        If .Show = True Then
            str_filepath = .SelectedItems(1)
            ws_macro.Range("C3") = Right(str_filepath, Len(str_filepath) - InStrRev(str_filepath, "\"))
            ws_macro.Range("D3") = Left(str_filepath, InStrRev(str_filepath, "\") - 1)
        End If
    End With

End Sub

Sub select_outputfolder()

    Call initialize

    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        If .Show = True Then
            ws_macro.Range("D4") = .SelectedItems(1)
        End If
    End With

End Sub

Sub execute_templatemacro()

    Dim fso As New FileSystemObject
    Dim wb_inputfile As Workbook
    Dim ws_inputfile As Worksheet
    Dim path_inputfile As String
    Dim wb_outputfile As Workbook
    Dim ws_outputfile As Worksheet
    Dim path_outputfile As String
    Dim num_row As Long
    
    Application.ScreenUpdating = False
    
    Call initialize

    '入力ファイルの妥当性チェック
    If ws_macro.Range("C3") = "" Or ws_macro.Range("D3") = "" Then
        MsgBox ws_macro.Range("B3") & "のフォルダのフルパス、またはファイル名が未入力です。"
        ws_macro.Activate
        Application.ScreenUpdating = True
        End
    End If
    
    If Right(ws_macro.Range("D3"), 1) <> "\" Then
        path_inputfile = ws_macro.Range("D3") & "\" & ws_macro.Range("C3")
    Else
        path_inputfile = ws_macro.Range("D3") & ws_macro.Range("C3")
    End If
    
    If fso.FileExists(path_inputfile) = False Then
        MsgBox ws_macro.Range("B3") & "が存在しません。"
        ws_macro.Activate
        Application.ScreenUpdating = True
        End
    End If

    '出力フォルダの妥当性チェック
    If ws_macro.Range("D4") = "" Then
        MsgBox ws_macro.Range("B4") & "のフォルダのフルパスが未入力です。"
        ws_macro.Activate
        Application.ScreenUpdating = True
        End
    End If
    
    If Right(ws_macro.Range("D4"), 1) <> "\" Then
        path_outputfile = ws_macro.Range("D4") & "\"
    Else
        path_outputfile = ws_macro.Range("D4")
    End If
    
    If fso.FolderExists(path_outputfile) = False Then
        MsgBox ws_macro.Range("B4") & "が存在しません。"
        ws_macro.Activate
        Application.ScreenUpdating = True
        End
    End If
   
    Workbooks.Open Filename:=path_inputfile
    Set wb_inputfile = ActiveWorkbook
    Set ws_inputfile = ActiveWorkbook.Worksheets(1)
    
    ws_inputfile.Copy
    Set wb_outputfile = ActiveWorkbook
    
    wb_outputfile.SaveAs Filename:=path_outputfile & "出力ファイル_" & Format(Now, "yyyymmddhhmmss") & ".xlsx"

    wb_outputfile.Close SaveChanges:=False

    wb_inputfile.Close SaveChanges:=False
    
    MsgBox "入力ファイルの1つ目のワークシートを、出力ファイルにコピーしました。"
    
    ws_macro.Activate

    ThisWorkbook.Save
    
    Application.ScreenUpdating = True

End Sub

この記事を書いた人

某IT企業に勤務。

2年間の休職を経て、一から独学でExcel VBAを習得し、半年でExcel VBA エキスパート資格のスタンダードに一発合格。

社内の非効率的な作業を効率化するExcelマクロの開発を、全行程まるっと一人で請け負い、これまでに約100個のExcelマクロを開発し、現在も増産中。

目次