書類作成自動化VBAマクロ
課題・悩み「書類作成や提出に時間がとられて効率が悪い・無駄な時間を省きたい」
解決策「VBAマクロを使って、書類の作成・提出を自動化する方法」を解説
仕事をしていく上で避けて通れないのが、事務作業などの細々した雑用。
仕事の成果にはならないのに、社内ルールが複雑すぎて多くの時間が取られるのが不毛すぎて…
特に申請書などの書類作成は、大した内容でなくても作成・提出に時間がかかります。
そこで、面倒な申請書などの書類作成の作業を自動化しました。
【VBAマクロを使って、書類の作成・提出を自動化する方法】を図解で解説しています。
書類の自動作成を補助するVBAマクロのWordファイルを配布中。
以下のボタンよりダウンロードしてください。
書類作成自動化VBAマクロ
Excelで書類作成・提出業務を自動化する方法
業務を自動化するには、自動化したい業務を洗い出して、各操作を小さい単位まで分解する必要があります。
この小さい単位の各操作の中から繰り返し作業を発見し、この繰り返し作業を自動化するのが、業務の自動化の基本的な流れになります。
書類作成・提出業務を自動化する方法は以下の通りです。
Excelで書類作成・提出業務を自動化する方法
- 業務マニュアルを作成する
- 見える化した操作の中から自動化できるものをピックアップする
- 各操作を自動化する
業務マニュアルを作成する
まずは、自動化したい業務のマニュアルや手順書を作成して、業務の細分化見える化をします。
業務マニュアルの作成方法は以下の投稿をご覧ください。
見える化した操作の中から自動化できるものをピックアップする
業務マニュアル作成を通じて見える化した各操作の中から、VBAマクロやPythonなどで自動化できる操作をピックアップします。
各操作を自動化する
ピックアップした各操作を自動化するVBAマクロのコードを作成します。
書類作成・提出のフロー・流れ
書類作成の流れを、以下のように見える化し、1つ1つの操作の内容と単位を明確にしました。
書類作成・提出のフロー・流れ
- フォルダを作成する
- 書類の原本(フォーマット)をコピーする
- 本文の作成・必要事項を入力する
- 作成した書類を添付してメールで承認依頼をする・関連部署に提出する
フォルダを作成する
まずは、申請書やその関連書類を保存するフォルダを作成します。
ここで、きちんと作業&保管場所を決めずに作業を始めると、必要書類が点在してしまい探す作業が発生するので、時間のロスにつながります。
また、デスクトップなどがファイルで乱雑になる原因にもなります。
フォルダ管理の方法については、以下の投稿をご覧ください。
書類の原本(フォーマット)をコピーする
作成する書類には、ExcelやWordのフォーマットがある場合がほとんどです。
書類を作成するには、この書類の原本(フォーマット)をコピーして、名前を付けて、新規で保存する必要があります。
本文の作成・必要事項を入力する
いよいよ書類の本文の作成に移ります。
コピーして作成した書類に必要事項を入力していきます。
本文や必要事項の欄には、必要に応じて入力ミスを減らす工夫をしておきます。
書類の入力ミスを減らす工夫
- 納期を自動計算されるようにする
- 共通の入力項目は参照できるようにする
- リストを設定して選択式にする
作成した書類を添付してメールで承認依頼をする・関連部署に提出する
作成した書類は多くの場合、上司に承認してもらうか、または担当者にメールで送付する必要があります。
依頼メールはテンプレートを作成しておくと、作業効率がアップします。
書類作成・提出業務でVBAマクロで自動化する操作
書類作成・提出業務の見える化した各操作の中から、以下の操作をExcel・WordのVBAマクロで自動化しました。
書類作成・提出業務でVBAマクロで自動化する操作
- フォルダを作成する
- 書類の原本(フォーマット)をコピーする
- 作成した書類を添付してメールで承認依頼をする・関連部署に提出する
具体的なVBAマクロのコードは、以下に記載しています。
フォルダを作成する
フォルダ作成はVBAマクロで自動化できます。
特に申請書等の作成では業務の流れが決まっているので、フォルダ構成もテンプレート化できます。
書類の原本(フォーマット)をコピーする
特定の書類の原本(フォーマット)をコピーして、名前を付けて保存する操作は、VBAマクロで自動化できます。
作成した書類を添付してメールで承認依頼をする・関連部署に提出する
作成した書類を承認者や担当者にメールを作成して送信する操作は、VBAマクロで自動化できます。
書類作成・提出業務の自動化のQ&A
- 書類作成の手間を減らす方法はありますか?
-
書類作成はフォーマットを作成したり、業務マニュアルを作成したり、自動化することで、作成の手間を減らすことができます。
- 領収書作成の一連の流れを自動化することは可能ですか?
-
領収書作成の業務は、業務の見える化して各操作に分解し、それぞれの操作を自動化することで、領収書作成の一連の流れを自動化することが可能です。
- エクセルを使用して書類の作成を自動化することはできますか?
-
エクセルVBAマクロを用いることで、書類作成を自動化することは可能です。
- 報告書を自動化することでどのようなメリットが得られますか?
-
報告書を自動化することで、業務を効率化できます。
- 報告書の自動作成にどのようなツールがおすすめですか?
-
報告書の自動作成に費用をかけたくない場合には、多くの会社で導入されているExcelやWordといったMicrosoft Officeがおすすめです。
フォルダを作成するVBAマクロのコード
このコードは、ユーザーが指定したフォルダ内に新しいメインフォルダ(DefaultMainFolderName)を作成します。
さらに、このメインフォルダ内に4つのサブフォルダ(SubFolder1, SubFolder2, SubFolder3, SubFolder4)を作成します。
Sub フォルダ作成()
Dim mainFolder As String
mainFolder = GetFolderSelection() & "DefaultMainFolderName" & "\"
' ダイアログでキャンセルされた場合は終了
If mainFolder = "DefaultMainFolderName\" Then Exit Sub
Dim subFolders() As String
subFolders = Split("SubFolder1,SubFolder2,SubFolder3,SubFolder4", ",")
CreateFolders mainFolder, subFolders
MsgBox "フォルダが作成されました", vbInformation, "完了"
End Sub
Function GetFolderSelection() As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
.Show
If .SelectedItems.Count = 1 Then
GetFolderSelection = .SelectedItems(1) & "\"
Else
GetFolderSelection = ""
End If
End With
End Function
Sub CreateFolders(mainFolder As String, ByRef subFolders() As String)
If Dir(mainFolder, vbDirectory) = "" Then
MkDir mainFolder
End If
For i = LBound(subFolders) To UBound(subFolders)
Dim folderPath As String
folderPath = mainFolder & subFolders(i) & "\"
If Dir(folderPath, vbDirectory) = "" Then
MkDir folderPath
End If
Next i
End Sub
コード内で変更する箇所
コード内で変更する箇所
- メインフォルダの名前
- サブフォルダの一覧
- ダイアログのタイトル
メインフォルダの名前
メインとなるフォルダの名前です。
この文字列を変更することで、作成されるメインフォルダの名前を任意に設定できます。
DefaultMainFolderName
サブフォルダの一覧
サブフォルダの名前の一覧です。
この部分を変更することで、サブフォルダの名前や数を任意に設定できます。
SubFolder1,SubFolder2,SubFolder3,SubFolder4
ダイアログのタイトル
フォルダ選択ダイアログのタイトルです。
この文字列を変更することで、ダイアログの表示タイトルを任意に設定できます。
フォルダを選択してください
コードの注意点
大量のサブフォルダを作成する場合、処理に時間がかかる可能性があります。
既存の同名のフォルダがある場合、新しく作成はされません。
コードを実行に必要な環境設定
このVBAコードを動作させるためには、ExcelのVBA環境で動作します。
Excelの「開発」タブからVBAエディタを開き、新しいモジュールを挿入して、コードを貼り付けることで実行可能です。
各コードの解説
各コードの解説
- メインのフォルダ作成プロセス
- フォルダの選択ダイアログ表示
- サブフォルダ作成処理
メインのフォルダ作成プロセス
ユーザーにフォルダの場所を選択させ、その場所にメインフォルダとサブフォルダを作成します。
エラーが発生した場合はメッセージで通知します。
Sub CreateDefaultFolders()
Dim mainFolder As String
mainFolder = GetFolderSelection() & "DefaultMainFolderName" & "\"
If mainFolder = "DefaultMainFolderName\" Then Exit Sub
Dim subFolders() As String
subFolders = Split("SubFolder1,SubFolder2,SubFolder3,SubFolder4", ",")
CreateFolders mainFolder, subFolders
MsgBox "フォルダが作成されました", vbInformation, "完了"
フォルダの選択ダイアログ表示
フォルダ選択ダイアログを表示し、選択されたフォルダのパスを返します。
エラーが発生した場合はメッセージで通知します。
Function GetFolderSelection()
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
.Show
If .SelectedItems.Count = 1 Then
GetFolderSelection = .SelectedItems(1) & "\"
Else
GetFolderSelection = ""
End If
End With
サブフォルダ作成処理
指定されたメインフォルダの中にサブフォルダを作成します。
エラーが発生した場合はメッセージで通知します。
Sub CreateFolders(mainFolder As String, ByRef subFolders() As String)
If Dir(mainFolder, vbDirectory) = "" Then
MkDir mainFolder
End If
For i = LBound(subFolders) To UBound(subFolders)
Dim folderPath As String
folderPath = mainFolder & subFolders(i) & "\"
If Dir(folderPath, vbDirectory) = "" Then
MkDir folderPath
End If
Next i
書類の原本(フォーマット)をコピーするVBAマクロのコード
このコードは、指定されたExcelファイルを開き、その内容をコピーして新しいExcelファイルとして保存するものです。
新しいファイルの保存場所や名前はユーザーがダイアログで選択できます。
書類の原本(フォーマット)をコピーするVBAマクロのコード
- 各コード
- コード内で変更する箇所
- コードの注意点
- コードを実行に必要な環境設定
- 各コードの解説
各コード
Wordで実行する場合とExcelで実行する場合でコードが少し異なります。
各コード
- ワードで実行する場合
- エクセルで実行する場合
ワードで実行する場合
Sub 原本をコピーして保存()
Dim ExcelApp As Object
Dim OriginalWb As Object
Dim NewWb As Object
Dim NewFilePath As String
Dim FileDialog As Object
' エラーハンドリングの設定
On Error GoTo ErrorHandler
' Excelアプリケーションを非表示で起動
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = False
' オリジナルのExcelファイルを開く
Set OriginalWb = ExcelApp.Workbooks.Open("C:\path\to\your\original\file.xlsx") ' ファイルのパスを変更する
' オリジナルのシートを新しいワークブックにコピー
OriginalWb.Sheets.Copy
Set NewWb = ExcelApp.ActiveWorkbook
' 保存ダイアログを設定
Set FileDialog = ExcelApp.FileDialog(2) ' 2は「名前を付けて保存」のダイアログを示す
FileDialog.InitialFileName = "C:\path\to\your\default\directory\default_filename.xlsx" ' 初期ディレクトリとファイル名を設定
' 保存ダイアログを表示
If FileDialog.Show = -1 Then
NewFilePath = FileDialog.SelectedItems(1)
' Excel形式で新しいファイルとして保存
NewWb.SaveAs FileName:=NewFilePath, FileFormat:=51 ' 51はxlsx形式を示す
Else
GoTo CleanUp ' キャンセルされた場合の処理へ
End If
' 処理の終了前のクリーンアップ
CleanUp:
OriginalWb.Close False ' オリジナルのファイルを保存せずに閉じる
If ExcelApp.Visible = False Then ExcelApp.Quit ' Excelアプリケーションを終了
Exit Sub
' エラーハンドリング
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
Resume CleanUp
End Sub
エクセルで実行する場合
Sub 原本をコピーして保存()
Dim ExcelApp As Object
Dim OriginalWb As Object
Dim NewWb As Object
Dim NewFilePath As String
Dim FileDialog As Object
' エラーハンドリングの設定
On Error GoTo ErrorHandler
' Excelアプリケーションを非表示で起動
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = False
' オリジナルのExcelファイルを開く
Set OriginalWb = ExcelApp.Workbooks.Open("C:\path\to\your\original\file.xlsx") ' ファイルのパスを変更する
' オリジナルのシートを新しいワークブックにコピー
OriginalWb.Sheets.Copy
Set NewWb = ExcelApp.ActiveWorkbook
' 保存ダイアログを設定
Set FileDialog = Application.FileDialog(2) ' 2は「名前を付けて保存」のダイアログを示す
FileDialog.InitialFileName = "C:\path\to\your\default\directory\default_filename.xlsx" ' 初期ディレクトリとファイル名を設定
' 保存ダイアログを表示
If FileDialog.Show = -1 Then
NewFilePath = FileDialog.SelectedItems(1)
' Excel形式で新しいファイルとして保存
NewWb.SaveAs FileName:=NewFilePath, FileFormat:=51 ' 51はxlsx形式を示す
Else
GoTo CleanUp ' キャンセルされた場合の処理へ
End If
' 処理の終了前のクリーンアップ
CleanUp:
OriginalWb.Close False ' オリジナルのファイルを保存せずに閉じる
If ExcelApp.Visible = False Then ExcelApp.Quit ' Excelアプリケーションを終了
Exit Sub
' エラーハンドリング
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
Resume CleanUp
End Sub
コード内で変更する箇所
コード内で変更する箇所
- Excelファイルの読み込み
- 保存のファイル形式
Excelファイルの読み込み
使用するExcelファイルの絶対パスを指定する必要があります。
C:\path\to\your\original\file.xlsx
保存のファイル形式
保存するExcelのファイル形式を変更したい場合、FileFormatの値を変更する必要があります。
FileFormat:=51
コードの注意点
データ量が非常に大きい場合、データのコピーに時間がかかる可能性があります。
このコードをWordで実行する場合、VBAでExcelを操作するための参照設定が必要です。
VBAエディタの「ツール」メニューから「参照設定」を選択し、”Microsoft Excel xx.x Object Library” (xx.xはバージョン番号) にチェックを入れる必要があります。
コードを実行に必要な環境設定
WordのVBAでExcelを操作するための参照設定が必要です。
VBAエディタで「ツール」→「参照設定」を開き、”Microsoft Excel xx.x Object Library”にチェックを入れてください。
各コードの解説
各コードの解説
- エラーハンドリングの設定
- Excelアプリケーションの起動
- Excelファイルの読み込み
- データのコピー
- 保存先の選択
- Excelファイルの保存
- オリジナルのExcelファイルのクローズ
- エラーハンドリング
エラーハンドリングの設定
エラーが発生したときの処理先を指定します。
この場合、ErrorHandlerラベルにジャンプします。
On Error GoTo ErrorHandler
Excelアプリケーションの起動
Excelを操作するためのアプリケーションオブジェクトを起動します。
この時点では非表示の状態です。
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = False
Excelファイルの読み込み
指定されたパスのExcelファイルを開きます。
Set OriginalWb = ExcelApp.Workbooks.Open("C:\path\to\your\original\file.xlsx")
データのコピー
オープンしたExcelファイルの全シートを新しいワークブックにコピーします。
OriginalWb.Sheets.Copy
Set NewWb = ExcelApp.ActiveWorkbook
保存先の選択
保存ダイアログを表示し、ユーザーが新しいワークブックの保存先を選択することができます。
Set FileDialog = ...
FileDialog.Show
Excelファイルの保存
ユーザーが選択した保存先に新しいワークブックを保存します。
NewWb.SaveAs Filename:=NewFilePath, FileFormat:=51
オリジナルのExcelファイルのクローズ
オリジナルのExcelファイルを保存せずに閉じます。
OriginalWb.Close False
エラーハンドリング
エラーが発生した場合、エラーメッセージを表示して、CleanUpラベルへジャンプします。
MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
添付ファイルを含むメールを作成するVBAマクロのコード
このコードは、Outlookのメールを作成し、指定したフォルダから複数のファイルを選択してそのメールに添付するVBAマクロです。
エラーが発生した場合、エラーメッセージを表示します。
正常に完了した場合、「完了しました」というメッセージが表示されます。
Sub メール作成()
' 必要なオブジェクトを定義
Dim OutApp As Object
Dim OutMail As Object
Dim FileDialog As Office.FileDialog
Dim i As Integer
On Error GoTo ErrorHandler ' エラーハンドリング開始
' Outlookのオブジェクトを生成
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
' ファイル選択ダイアログを初期化
Set FileDialog = Application.FileDialog(1) ' 1 = msoFileDialogOpen
With FileDialog
.Title = "添付するファイルを選択してください"
.AllowMultiSelect = True
.InitialFileName = "C:\Documents\"
' ファイルが選択された場合のみ添付処理を実行
If .Show = -1 Then
For i = 1 To .SelectedItems.Count
OutMail.Attachments.Add .SelectedItems(i)
Next i
End If
End With
With OutMail
' メールの設定
.To = "example@example.com"
.Subject = "テストメールの件名"
.Body = "こんにちは、" & vbNewLine & _
"これはテストメールです。" & vbNewLine & _
"よろしくお願いいたします。" & vbNewLine
.Display
End With
ProcedureExit:
' オブジェクトを解放
Set OutMail = Nothing
Set OutApp = Nothing
Set FileDialog = Nothing
MsgBox "完了しました", vbInformation ' 完了メッセージを表示
Exit Sub ' 通常終了
ErrorHandler:
' エラーが発生した場合の処理
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
Resume ProcedureExit ' オブジェクト解放と完了メッセージを表示するための処理にジャンプ
End Sub
添付ファイルを含むメールを作成するVBAマクロのコード
- コード内で変更する箇所
- コードの注意点
コード内で変更する箇所
コード内で変更する箇所
- メールの宛先
- メールの件名
- メールの本文
- 初期フォルダの設定
メールの宛先
送りたい相手のメールアドレスに変更する必要があります。
example@example.com
メールの件名
送るメールの件名に適した内容に変更してください。
テストメールの件名
メールの本文
送るメールの本文を適した内容に変更してください。
こんにちは、...
初期フォルダの設定
ダイアログが最初に表示するフォルダのパスを変更したい場合、この部分を変更します。
C:\Documents\
コードの注意点
大量のファイルを選択して添付する場合、処理に時間がかかる可能性があります。
WordとOutlookのバージョンや設定によっては、マクロの動作が異なることがあります。
セキュリティの設定により、Outlookのオブジェクト生成時にセキュリティの警告が表示される場合があります。
コードを実行に必要な環境設定
WordのVBAエディタで、このマクロを実行するには、参照設定から「Microsoft Office xx.x Object Library」(xx.xはバージョンによる)を追加する必要があります。
これにより、Office.FileDialogなどのOfficeのオブジェクトを利用できるようになります。
Outlookがインストールされている環境でのみ、このマクロは動作します。
各コードの解説
各コードの解説
- 必要なオブジェクトの定義
- エラーハンドリングの設定
- Outlookオブジェクトの生成
- ファイル選択ダイアログの初期化
- メールの設定
- オブジェクトの解放
- 完了メッセージの表示
必要なオブジェクトの定義
Outlookやファイルダイアログを操作するためのオブジェクトを定義します。
Dim OutApp As Object
Dim OutMail As Object
Dim FileDialog As Office.FileDialog
Dim i As Integer
エラーハンドリングの設定
エラーが発生した場合にエラーハンドラーへジャンプする設定を行います。
On Error GoTo ErrorHandler
Outlookオブジェクトの生成
Outlookのアプリケーションとメールアイテムのオブジェクトを作成します。
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
ファイル選択ダイアログの初期化
ユーザーがファイルを選択できるダイアログを表示するための設定を行います。
指定したフォルダから複数のファイルを選択可能にします。
コード内のWith FileDialog ... End Withブロック
メールの設定
メールの宛先、件名、本文を設定し、メールを表示します。
コード内のWith OutMail ... End Withブロック
オブジェクトの解放
使用したオブジェクトをメモリから解放します。
Set OutMail = Nothing
Set OutApp = Nothing
Set FileDialog = Nothing
完了メッセージの表示
全ての処理が正常に完了した場合、「完了しました」というメッセージを表示します。
MsgBox "完了しました", vbInformation
エラーハンドリング
エラーが発生した場合の処理を行います。
エラーの詳細を表示し、後処理としてオブジェクトの解放や完了メッセージの表示のための処理にジャンプします。
コード内のErrorHandler:ラベル以下の部分
まとめ:
VBAマクロを使って書類作成を自動化する方法でした。
コメント