目次
当サイトの運営者 overdoser謹製のExcelマクロのテンプレートを差し上げます!
これまでに約100本の実際の業務で使用するExcelマクロを開発してきましたが、Excelマクロを開発する度に一からExcelマクロを作成することが非効率なことに気付き、これまでに作成してきたExcelマクロのいいとこどりをした、overdoser謹製のExcelマクロのテンプレートファイルを作成しましたので、皆様に無料で差し上げます。
ファイルのダウンロード~マクロの実行までの手順
- まず最初に、以下のボタンよりExcelマクロ作成用テンプレートマクロのZIPファイルをダウンロードしてください。
- 任意のフォルダで、ダウンロードしたZIPファイルを解凍してください。
- 解凍後、「Excelマクロ作成用テンプレートマクロ」というフォルダが作成され、その配下に「Excelマクロ作成用テンプレートマクロ.xlsm」というファイルが格納されています。
- この「Excelマクロ作成用テンプレートマクロ.xlsm」というファイルを開くと、マクロファイルのワークシートが表示されます。
- なお、Excel上に以下のようなセキュリティの警告が表示された場合は、「コンテンツの有効化」のボタンをクリックしてください。
マクロの解説
マクロファイルを開くと、以下のようなワークシートが表示されます。
一般的な業務で使用するマクロは、入力ファイルを読み込み、マクロで何らかの編集を行って、出力ファイルを作成するというのが、経験上非常に多いため、それに特化した作りとなっています。
このテンプレートマクロの仕様は以下の通りです。
- 入力ファイルのExcelファイルを開き、その1シート目をコピーして新規のワークブックを生成する。
- そのワークブックを出力ファイルのネーミングルールに従ってファイル名を命名し、出力フォルダに保存する。
- 入力ファイルを保存せずに閉じる。
このワークシートの各部品について、上から説明していきます。
- 入力ファイルの指定方法は、以下のいずれかで設定可能です。
- E3セルに設置しているファイル選択ボタンをクリックすると、ファイル選択ウィンドウが表示されるので、そこでファイルを選択すると、C3セルのファイル名、D3セルのフォルダのフルパスに値が反映されます。
- 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