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

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

 

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

 

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

 

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

 

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

 

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

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

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

 

広告

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

 

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

 

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枚貼り付けるようにしたい
  • 写真データの名前は非表示にしたい
  • 写真をもっと大きく貼り付けたい

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

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

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

 

VBA初心者が効率化マクロを導入する方法

 

VBAなんて扱ったことないけどエクセル作業を自動化するマクロを導入したい!

このような問題を抱えながら日々のエクセル業務をこなしている方がおおくいらっしゃるのではないでしょうか。

 

こんな問題を解決する方法がこちら

  • マクロの開発を外注に依頼する
  • マクロが設定されたエクセルファイルをダウンロードする
  • 参考書やネットでVBAスキルを身に付ける

 

VBAの勉強を始める前は上記の方法で効率化マクロを導入していました。

 

 

 

完成されたマクロを使ってエクセル業務を処理する

作業効率が2倍以上アップ!!

便利すぎて自分でもマクロを設定したいと考え始める

参考書やネットの情報でVBAスキルを身に付ける

マクロ開発を代行できる程のスキルを習得

 

 

 

VBAは

他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

という特徴があります。

 

毎日のルーティーン作業にうんざりしている、だれでもできる単純作業に時間を費やしている、という方はあなたに合った方法でVBAを導入しちゃいましょう。

 

マクロの開発を外注に依頼する

マクロの開発を外注に依頼する導入方法は

VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法

です。

 

「こんなエクセル作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」

こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

 

Left Caption

ガッツポーズの人

完成まで本業に集中できるので効率的

 

 

デメリットは、費用がかかることだけ。

開発内容、依頼先によってかかる費用は大きく異なります。

私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

 

Left Caption

疑問がある人

ちょっと高くない。。。

 

ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。

開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、

費用が安い!スピード納期!!

でやらせてもらっています。

 

ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。

 

ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。

 

 

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

VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』ですぐにエクセル作業を自動化することができます。

 

たとえば、

A4用紙に写真を貼り付けてコメントを入力する作業を自動化したい!という場合、

『写真を貼り付けるマクロ』が設定されたエクセルファイルをダウンロードすれば問題解決です。

 

実際に、『写真を貼り付けるマクロ』をダウンロードして使っている様子がこちら

写真貼付けマクロの使い方を示したイラスト

 

 

Left Caption

ガッツポーズの人

写真貼付け作業の効率がめちゃくちゃアップ

 

 

『マクロが設定されたエクセルファイルをダウンロード』する導入方法は、

VBA初心者でもマクロを導入できる、費用が安い、

というメリットがあります。

 

しかし

VBAに関する情報が多く公開されているとはいえ、ネット上で想定するマクロは見つけることが難しい

というデメリットもあります。

 

Left Caption

ガッツポーズの人

お目当てのマクロが見つかればラッキー

 

個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。

 

今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。

 

 

 

参考書やネットでVBAスキルを身に付ける

先程も紹介しましたが、

VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

プログラミングです。

 

言い換えると、

情報量が豊富なので自分で勉強できちゃう

ということです。

 

私のVBAスキルはほとんど独学で身に付けたもので、

考えた処理のほとんどをVBAで表現できるレベルにまで到達した!

と思っています。

 

私の作ったマクロをプロのプログラマーが見れば、

お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!

と感じるはずです。

 

でも、

私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?

 

独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、

業務内容に合ったマクロを開発できるようになれます。

 

独学でVBAスキルを身に付けるコツは、

エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる

です。

 

とは言っても、全くの知識0の方は何をすればいいかわからないですよね。

 

VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。

 

VBAの知識0の方でもすいすい読み進められる内容になっています。

やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。

 

実際に私はこの参考書を読んでからVBAの勉強を始めました。

 

Left Caption

ひらめく人

VBA学習スタートのきっかけをくれた参考書


 

 

VBAの魅力を発見した後は、

ひたすら自動化したい処理を実現するコードを書くだけ

です。

 

【VBA 写真を貼る】、【VBA PDF出力】、のようにネット検索すれば知りたいコードをすぐにゲットできます。

 

実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると

自然といろんなマクロが作れるようになっているはずです。

 

VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。