エクセルで書類作成を自動化するマクロ【サンプルコードを掲載】

エクセルでの書類作成を自動化したい!

 

こんな要望にお応えします。

 

この記事で紹介している書類作成を自動化するマクロを導入すれば、時間のかかっている書類作成業務の効率を格段にアップさせることができます。

 

書類作成を自動化するマクロの種類がこちら

 

  • 転記マクロを使って様式が決まっている書類作成業務の効率アップ
  • リスト内容が変化するプルダウンリストを使って入力作業の効率アップ
  • 写真を貼り付けるマクロで写真添付が必要な書類作成業務の効率アップ
  • 連続印刷マクロで印刷業務の効率アップ

 

これらのマクロは、「こんな処理を自動化したいんだけどどうすればいいの?」という依頼を受けて開発したマクロがほとんどです。

「こんな処理がしたい!」「この作業がめんどうで困っている!」という悩みを解消するために開発したマクロなので、実際の業務でかなり役立つと思います。

あなたが今抱えている案件に近いものがあれば是非参考にしてみてください。

 

広告

様式が決まっている書類作成に使える転記マクロとは

 

様式が決められた書類作成業務には転記マクロの導入がかなりおすすめです。

 

Right Caption

作業する人

というか必須事項!!

転記マクロを導入すると、

シートから別シートに情報を転記。もしくはシートから別ブックに情報を転記

する処理を自動化することができます。

 

情報を転記するマクロがなぜ様式が決められた書類作成業務に役立つのかと言うと、

様式が決められた書類作成の場合、編集箇所が決まっていて編集内容がパターン化されたものがほとんど

だからです。

 

「氏名」「日付」「会社名」を編集して完成

この場合、編集する項目は別シートで一覧表で管理し様式に転記するといった方法をとると書類作成業務の効率が格段にアップします。

 

転記マクロを導入した事例

「一覧表」シートから「工事契約書」シートに「工事件名」や「工事場所」、「金額」などの情報を転記する

といった内容です。

「一覧表」シートの一番左側にある「工事番号」から転記する情報を確定しています。

「工事番号」を入力して「実行」ボタンを押すだけで工事契約書類を作成することができます。

この転記マクロを使えば、過去に作成した書類をすぐに出力することが可能です。

 

転記マクロのサンプルコード

Sub 工事契約書転記()
'''''''''''''''''''''''''Sheetの設定""""""""""""""""""""""""""""
Dim Ash As Worksheet
Dim Bsh As Worksheet
Set Ash = ThisWorkbook.Worksheets("一覧表")
Set Bsh = ThisWorkbook.Worksheets("工事契約書")
''''''''''''''''''''''''''ユーザーフォームで入力した値を変数iで取得""""""""""""""""""""""""""""
i = UserForm1.TextBox1.Value
''''''''''''''''''''''''''一覧表から工事契約書へ値を転記する""""""""""""""""""""""""""""
'''''工事名を転記'''''
Bsh.Range("H6") = Ash.Cells(i + 2, 2)
Bsh.Range("H6").HorizontalAlignment = xlLeft
'''''工事場所を転記'''''
Bsh.Range("H8") = Ash.Cells(i + 2, 3)
Bsh.Range("H8").HorizontalAlignment = xlLeft
'''''工期(着手)を転記'''''
Bsh.Range("H10") = Ash.Cells(i + 2, 4)
Bsh.Range("H10").HorizontalAlignment = xlCenter
Bsh.Range("H10").NumberFormatLocal = "ggge年m月d日"
'''''工期(竣功)を転記'''''
Bsh.Range("P10") = Ash.Cells(i + 2, 5)
Bsh.Range("P10").HorizontalAlignment = xlCenter
Bsh.Range("P10").NumberFormatLocal = "ggge年m月d日"
'''''請負金額を転記'''''
Bsh.Range("L12") = Ash.Cells(i + 2, 6)
Bsh.Range("L12").HorizontalAlignment = xlCenter
Bsh.Range("L12").NumberFormatLocal = "#,###"
'''''消費税を転記'''''
Bsh.Range("R14") = Bsh.Range("L12").Value * 0.1
Bsh.Range("R14").HorizontalAlignment = xlCenter
Bsh.Range("R14").NumberFormatLocal = "#,###"
'''''発注者住所を転記'''''
Bsh.Range("J33") = Ash.Cells(i + 2, 8)
Bsh.Range("J33").HorizontalAlignment = xlLeft
'''''発注者氏名を転記'''''
Bsh.Range("J35") = Ash.Cells(i + 2, 7)
Bsh.Range("J35").IndentLevel = 2
'''''受注者住所を転記'''''
Bsh.Range("J37") = Ash.Cells(i + 2, 10)
Bsh.Range("J37").HorizontalAlignment = xlLeft
'''''受注者氏名を転記'''''
Bsh.Range("J39") = Ash.Cells(i + 2, 9)
Bsh.Range("J39").IndentLevel = 2
End Sub

 

8行目でユーザーフォームのテキストボックスの情報を取得するコードを設定しています。

そのため、上記のサンプルコードだけをコピペしても利用することができなので注意してください

下記のサイトでは、転記マクロが設定されたエクセルファイルをダウンロードしてお使いいただくことができます。


仕事で扱いの様式に合わせたコードに編集をして利用してみてください。

印刷業務で使える連続印刷マクロとは

大量の書類を印刷するような業務には連続印刷マクロの導入がおすすめです。

 

連続印刷マクロは、

「氏名」「住所」「会社名」など簡単な編集を行い、資料を印刷。そして、この処理を何度も繰り返す

という処理を行います。

 

Left Caption

ひらめく人

請求書や領収書、郵送に付属する送付状などの大量印刷にピッタリ

 

請求書や領収書、郵送に付属する送付状などの書類は一度に大量印刷をすることが多い傾向にあります。

A会社用に印刷、B会社用に印刷、、C会社用に印刷、、、

このように会社毎に一枚ずつ印刷処理をしていては時間がいくらあっても足りません。

 

連続印刷マクロを導入すれば書類印刷業務の効率を格段にアップさせることが可能です。

 

まとまった書類を印刷することがある!と言う方はチェックしてみてください。

 

連続印刷マクロを導入した事例

サンプル事例として、宛先が異なる工事契約書をまとめて印刷する業務に連続印刷マクロを導入してみました。

 

使い方、マクロの処理としてはこんな感じ

 

 

あらかじめ入力しておいて、該当する番号をユーザーフォームのボックスに入力。

実行すると、入力した番号分の書類がいっきに印刷される

という内容です。

 

連続印刷マクロのサンプルコード


Sub 工事契約書転記()
'''Sheetの設定'''
Dim Ash As Worksheet
Dim Bsh As Worksheet
Set Ash = ThisWorkbook.Worksheets("一覧表")
Set Bsh = ThisWorkbook.Worksheets("工事契約書")
''''''''''''''''''''''''''ユーザーフォームで入力した値を変数iで取得""""""""""""""""""""""""""""
For j = 1 To 5
If UserForm1("TextBox" & j).Value <> "" Then
i = UserForm1("TextBox" & j).Value
''''''''''''''''''''''''''一覧表から工事契約書へ値を転記する""""""""""""""""""""""""""""
'''''工事名を転記'''''
Bsh.Range("H6") = Ash.Cells(i + 2, 2)
Bsh.Range("H6").HorizontalAlignment = xlLeft
'''''工事場所を転記'''''
Bsh.Range("H8") = Ash.Cells(i + 2, 3)
Bsh.Range("H8").HorizontalAlignment = xlLeft
'''''工期(着手)を転記'''''
Bsh.Range("H10") = Ash.Cells(i + 2, 4)
Bsh.Range("H10").HorizontalAlignment = xlCenter
Bsh.Range("H10").NumberFormatLocal = "ggge年m月d日"
'''''工期(竣功)を転記'''''
Bsh.Range("P10") = Ash.Cells(i + 2, 5)
Bsh.Range("P10").HorizontalAlignment = xlCenter
Bsh.Range("P10").NumberFormatLocal = "ggge年m月d日"
'''''請負金額を転記'''''
Bsh.Range("L12") = Ash.Cells(i + 2, 6)
Bsh.Range("L12").HorizontalAlignment = xlCenter
Bsh.Range("L12").NumberFormatLocal = "#,###"
'''''消費税を転記'''''
Bsh.Range("R14") = Bsh.Range("L12").Value * 0.1
Bsh.Range("R14").HorizontalAlignment = xlCenter
Bsh.Range("R14").NumberFormatLocal = "#,###"
'''''発注者住所を転記'''''
Bsh.Range("J33") = Ash.Cells(i + 2, 8)
Bsh.Range("J33").HorizontalAlignment = xlLeft
'''''発注者氏名を転記'''''
Bsh.Range("J35") = Ash.Cells(i + 2, 7)
Bsh.Range("J35").IndentLevel = 2
'''''受注者住所を転記'''''
Bsh.Range("J37") = Ash.Cells(i + 2, 10)
Bsh.Range("J37").HorizontalAlignment = xlLeft
'''''受注者氏名を転記'''''
Bsh.Range("J39") = Ash.Cells(i + 2, 9)
Bsh.Range("J39").IndentLevel = 2
ActiveSheet.PageSetup.PrintArea = ("A1:X39")
ActiveSheet.PrintPreview
ActiveSheet.PrintOut
Else
End If
Next
End Sub

 

49行目のActiveSheet.printoutというコードが実行されると、プリンターへ印刷実行命令が出てしまいます。

コードをコピペして使う予定の方は、49行目のコードを一旦無効化するか削除することをおすすめします。

 

Right Caption

ダウンする人

マクロ開発時無駄に紙を出力してしまい失敗しました

下記のサイトでは、連続印刷マクロが設定されたエクセルファイルをダウンロードしてお使い頂くことができます。

業務内容に合わせたコードに編集をして利用してみてください。

 

入力作業の効率をアップさせるプルダウンリストとは

プルダウンリストを多用しているエクセルファイルには内容が変化するプルダウンリストがおすすめです。

 

内容が自動で変更するプルダウンリストは、

条件によって表示されるリスト項目を自動的に変化させる

という処理を行います。

 

プルダウンリストの設定自体はVBAを使わずに設定することが可能ですが、

条件によって内容を変化させることはプログラミングを使わなければ表現することができません

 

内容が自動で変更するプルダウンリストを導入すれば、

「リスト項目が増えすぎて使いにくい」「リスト項目の変更方法がわからなくなった」というデメリットを解消することができます。

 

言葉で解説しても「内容が変化するってどういうこと?」って感じますよね。

イメージがつにくいと思いますのでサンプル事例を使って詳しく解説していきます。

 

プルダウンリストを表示させるマクロを導入した事例

サンプル事例としてエクセル家計簿に内容が変化するプルダウンリストマクロを導入しました。

どのような処理ができるかというとこんな感じ

プルダウンリストを設定したセルの一つ左のセルの情報からリスト内容を決定しています。

 

左のセルに「収入」と入力されていたら、リストには「給与、ボーナス」の2つが表示される

左のセルに「支出」と入力されていたら、リストには「食費、日用品、交際費など」が表示される

状況によって最適なリスト項目のみが表示されるのでめちゃくちゃ使いやすい。

 

リスト内容を変更したいときは、「項目・設定」シートの内容を編集するだけです。

 

「項目・設定」シートがこんな感じ

 

入力規則やコードの編集をしなくてもプルダウンリストの内容を変更することができるので、誰でも簡単に操作することができます。

 

プルダウンリストを表示させるマクロのサンプルコード

 

Private Sub WorkSheet_SelectionChange(ByVal Target As Range)
Dim Ash  As Worksheet
Set Ash = Sheets("項目・設定")
ActiveSheet.Range("I:L").Validation.Delete
ActiveSheet.Range("M:P").Validation.Delete
retu = Ash.Cells(6, Columns.Count).End(xlToLeft).Column
retu2 = Ash.Cells(22, Columns.Count).End(xlToLeft).Column
On Error Resume Next
Dim A As String
A = Cells(Target.Row, Target.Column - 3)
If (Target.Column = 9) And (A = "収入") Then
risuto = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Ash.Range(Ash.Cells(6, 10), Ash.Cells(6, retu))))
With Target.Validation
.Add Type:=xlValidateList, Formula1:=Join(risuto, ",")
.ShowError = False
End With
Else
End If
If Err <> 0 Then
Err.Clear
End If
Dim B As String
B = Cells(Target.Row, Target.Column - 3)
If (Target.Column = 9) And (A = "支出") Then
risuto2 = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Ash.Range(Ash.Cells(22, 10), Ash.Cells(22, retu2))))
With Target.Validation
.Add Type:=xlValidateList, Formula1:=Join(risuto2, ",")
.ShowError = False
End With
Else
End If
If Err <> 0 Then
Err.Clear
End If
Dim C As String
C = Cells(Target.Row, Target.Column - 4)
For i = 10 To retu
If (Target.Column = 13) And (Ash.Cells(6, i) = C) Then
gyo = Ash.Cells(Rows.Count, i).End(xlUp).Row
risuto3 = WorksheetFunction.Transpose(Ash.Range(Ash.Cells(7, i), Ash.Cells(17, i)))
With Target.Validation
.Add Type:=xlValidateList, Formula1:=Join(risuto3, ",")
.ShowError = False
End With
Else
End If
Next
If Err <> 0 Then
Err.Clear
End If
Dim D As String
D = Cells(Target.Row, Target.Column - 4)
For i = 10 To retu2
If (Target.Column = 13) And (Ash.Cells(22, i) = D) Then
gyo = Ash.Cells(Rows.Count, i).End(xlUp).Row
risuto4 = WorksheetFunction.Transpose(Ash.Range(Ash.Cells(23, i), Ash.Cells(gyo, i)))
With Target.Validation
.Add Type:=xlValidateList, Formula1:=Join(risuto4, ",")
.ShowError = False
End With
Else
End If
Next
If Err <> 0 Then
Err.Clear
End If
If (Target.Column = 6) Then
With Target.Validation
.Add Type:=xlValidateList, Formula1:="収入,支出"
.ShowError = False
End With
Else
End If
If Err <> 0 Then
Err.Clear
End If
Dim E As String
E = ActiveSheet.Cells(Target.Row, Target.Column)
If E = "集計実行" Then
Call 月別シート曜日
Call 月別シート計算
Call 月別シートグラフ
Else
End If
End Sub

 

上記のサンプルコードはエクセル家計簿に設定されているマクロの一部を抜粋したものです。

他にもいろんなマクロを組み合わせているので全てを掲載することができませんでした。

 

エクセル家計簿を使ってみたい!と言う方は下記のサイトでダウンロードすることが可能です。

興味のある方はチェックしてみてください。

 

写真添付が必要な書類作成で使える写真を貼り付けるマクロとは

エクセルに写真データを添付する業務が多い場合、写真を貼り付けるマクロの導入がおすすめです。

 

写真を貼り付けるマクロを使えば下記のような操作を一瞬で処理することが可能です。

 

 

  • 写真データの大きさを自動調整
  • 写真データの貼付け配置を自動調整
  • 写真データの名前を表示

 

 

何百枚もの写真データを貼り付けて資料を作成することは結構大変な作業です。

 

Left Caption

疲れ果てた人

ちゃんと大きさを揃えて配置しなければ、見栄えの悪い資料になってしまう

 

写真を貼り付けるマクロを使えば、こんな手間のかかる写真貼り付け作業を完全自動化することができます。

 

写真を貼り付けるマクロを導入した事例

指定するフォルダ内の写真データを全て貼り付けるマクロを導入しました。

 

どのような処理ができるかというとこんな感じ

 

大量の写真データを一瞬で編集することができます。

サンプル事例では、A4サイズに3枚の写真を貼り付ける設定にしていますが自由に変更することが可能です。

 

写真を貼り付けるマクロのサンプルコード

Sub 写真挿入横()
Dim Ash As Worksheet
Set Ash = Sheets("設定")
Dim Csh As Worksheet
Set Csh = Sheets("写真(横)")
Const cnsTitle = "ファイル名一覧取得"
Const cnsDIR = "\*.*"
Dim xlAPP As Application
Dim strPath As String
Dim strFilename As String
Dim GYO As Long
Dim zukei As Shape
Dim myFileName  As String
Dim syasin As String
Dim Path As String
rm = Csh.Cells(Rows.Count, 25).End(xlUp).Row
For Each sa In Csh.Shapes
On Error Resume Next
If sa.TopLeftCell.Address >= Csh.Cells(100, 1).Address Then
sa.Delete
End If
If Err <> 0 Then
Err.Clear
End If
Next
For i = 3 To rm Step 21
Csh.Range(Csh.Cells(i, 25), Csh.Cells(i + 2, 38)).ClearContents
Next
Set xlAPP = Application
' フォルダの場所を指定する
strPath = Ash.Cells(3, 1)
' フォルダの存在確認 --- 必要な場合のみ記述 ---
If Dir(strPath, vbDirectory) = "" Then
MsgBox "指定のフォルダは存在しません。", vbExclamation, cnsTitle
Exit Sub
End If
' 先頭のファイル名の取得
strFilename = Dir(strPath & cnsDIR, vbNormal)
' ファイルが見つからなくなるまで繰り返す
Do While strFilename <> ""
' 行を加算
GYO = GYO + 21
Csh.Cells(GYO - 18, 25).Value = strFilename
' 次のファイル名を取得
strFilename = Dir()
Loop
For i = 1 To rm Step 21
Csh.Cells(i + 2, 2).Select
syasin = Ash.Cells(3, 1) & "\" & Csh.Cells(i + 2, 25).Value
Csh.Pictures.Insert syasin
Csh.Pictures.Height = Range(Csh.Cells(i + 2, 2), Csh.Cells(i + 20, 23)).Height
Next i
End Sub

 

42、47、48行目で写真データの貼付け場所の指定を行っています。

  • A4サイズに写真データを3枚貼り付けるのではなく、5枚貼り付けるようにしたい
  • 写真データの名前は非表示にしたい
  • 写真をもっと大きく貼り付けたい

という場合、上記サンプルコードを編集する必要があります。

 

写真を貼り付けるマクロを使ってみたい!と言う方は下記のサイトでダウンロードすることが可能です。

是非チェックしてみてください。

 

書類作成の効率をアップさせるためのマクロ導入方法

 

マクロを導入することで確実に書類作成業務の効率をにアップさせることが可能です。

 

  • ルーティーン作業を自動化
  • 大量の分析処理を自動化
  • 細かな編集作業を正確に処理

今まで1日かかっていた作業が半日に!半日かかっていた作業が1時間に!!

 

Right Caption

作業する人

ビックリするくらい書類作成業務の効率がアップします

さっそくマクロを使って今抱えている業務の効率をアップさせたいと考えたとき、どうやって導入していけば良いのでしょうか?

VBAに詳しい方であれば自ら好きなようにマクロを設定することができますが、VBA初心者の方はそうはいきません。

VBA初心者がどうやってマクロを導入すればいいのか、具体的な方法をご紹介します。

 

業務内容に合わせたマクロの開発依頼

最も手っ取り早くマクロを導入する方法は、

業務内容に合わせたマクロを開発してもらい、マクロが設定されたエクセルファイルをもらう

という方法です。

 

マクロ開発者に「どんな作業をしているのか」「どんな処理を自動化したいのか」を伝えるだけで、業務内容に合わせたマクロを開発してもらうことが可能。

業務内容をしっかりマッチしたマクロだと半永久的に使い続けることができます。

メリット

 

  • マクロ開発に要する時間を省略できる
  • 業務内容にぴったりのマクロを導入できる

 

デメリット

 

  • 費用がかかる
  • 業務内容を伝えるのが難しい

 

 

マクロが設定されたエクセルファイルをダウンロード

ネットを検索すると、作業効率化マクロが設定されたいろんなエクセルデータがアップされています。

業務内容にぴったりのマクロをダウンロードすることが出来ればすぐに作業効率をアップさせることが可能です。

メリット

 

  • マクロ開発にかかる時間を省略することができる
  • 手軽に効果化マクロを導入できる
  • 無料、もしくは安価でマクロを導入できる

 

デメリット

 

  • 業務内容にぴったりのマクロを見つけるのは難しい
  • 多少のアレンジが必要になる

 

 

VBAの勉強を始める

VBAスキルを身に付けることによって、

自ら作業効率化マクロを開発し導入する

という方法です。

 

VBAの勉強と聞いて、

  • VBA(プログラミング)って難しそう
  • スキルを身につけるのに時間がかかりそう
  • 途中で挫折しそう

とネガティブに考える方が多いかと思います。

 

確かにプログラミングは初心者にとって身につけることが難しいスキルですが、VBAはプログラミングの中でも最も身に付けやすいプログラミングです。

 

なぜかというと、

VBAに関する教材がふんだんに販売されていて簡単に情報を取得できるから

です。

特におすすめの教材がオンラインプログラミングスクール【1st Step】です。

仕事をしていてまとまった勉強時間を確保できない方でも効率よくVBAスキルを身につけることができます。

 

下記の記事ではオンラインプログラミングスクール【1st Step】のレビューを紹介しています。

 

これからVBA学習を本格的にスタートさせたい!と考えている方は是非チェックしてみてください。

 

ほかにも、マメブログでは「素人でもすぐにvbAスキルを身につける方法」や仕事で役立つVBAの情報をメルマガで発信しています。

 

勤めていた会社で本当に役立ったマクロ情報、会社でよくあるエクセル業務の落とし穴、など

誰もが一度は体験するエクセルの悩みを解決する情報をマメマメ配信します。

>>> エクセルVBA有益情報発信メルマガの登録はこちら

VBAスキルを身につけて書類作成業務の効率をアップさせたいという方はぜひ参考にしてみてください。