エクセルでの資料作成を自動化(写真の貼り付け・テキスト転記・印刷マクロの導入)

Left Caption

豆父ちゃん

エクセルを使った資料作成を自動化したい!もっと作業効率を上げたい!

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

結論から言うと、写真貼り付けマクロ、転記マクロ、印刷マクロを組み合わせて自動化する!ということです。

この記事で紹介する資料作成とは、エクセルに写真データを添付して作成する資料作りのことをいいます。写真を貼り付けて資料を作成する際、写真の大きさや位置を調整したり写真の名前を記入したりしなければなりません。ほかにも氏名や日時の編集が必要になることがほとんどです。

必要事項の編集と写真の貼り付け両方の処理が必要になると時間がかかるしミスの発生も多くなります。

そんな手間と時間のかかる写真の貼り付けが必要な資料作成を自動化するマクロをご紹介します。

 

写真付き資料の作成を自動化するマクロとは

シートからシートへ情報を転記するマクロ、指定するフォルダ内の写真データを貼り付けるマクロ、印刷プレビューを自動で表示するマクロを組み合わせたものです。

 

資料作成自動化マクロの使い方

1.設定シートの必要事項を全て入力する

2.ユーザーフォームに設定シートのA列の番号を入力し、実行ボタンをクリック

使い方はたったこれだけです。設定シートに入力した各項目が反映され、指定したフォルダ内の写真が貼り付けられました。このマクロを使えば、誰でも簡単に写真が添付された資料を作れるようになります。

 

資料作成の自動化マクロのサンプル

1 Sub 写真付資料作成マクロ()
2 "Sheetの設定""
3 Dim Ash As Worksheet
4 Dim Bsh As Worksheet
5 Set Ash = ThisWorkbook.Worksheets(“設定")
6 Set Bsh = ThisWorkbook.Worksheets(“資料")
7 On Error Resume Next
8 "’ユーザーフォームで入力した値を変数iで取得"""
9 i = UserForm2.TextBox1.Value
10 "’一覧表から資料へテキストを転記する""
11 Bsh.Cells(11, 6).ClearContents
12 Bsh.Range(Bsh.Cells(12, 6), Bsh.Cells(12, 12)).ClearContents
13 Bsh.Cells(13, 6).ClearContents
14 Bsh.Cells(14, 6).ClearContents
15 Bsh.Cells(6, 36).ClearContents
16 Bsh.Cells(7, 36).ClearContents
17 Bsh.Cells(8, 36).ClearContents
18 Bsh.Cells(9, 36).ClearContents
19 Bsh.Cells(10, 36).ClearContents
20 G = Bsh.Cells(Rows.Count, 23).End(xlUp).Row
21 For k = 1 To G
22 Bsh.Cells(k, 23).ClearContents
23 Next k
24 ""’件名を転記""’
25 Bsh.Cells(11, 6) = Ash.Cells(i + 2, 2)
26 Bsh.Cells(11, 6).HorizontalAlignment = xlLeft
27 ""’日時を転記""’
28 Bsh.Range(Bsh.Cells(12, 6), Bsh.Cells(12, 12)).Merge
29 Bsh.Range(Bsh.Cells(12, 6), Bsh.Cells(12, 12)) = Ash.Cells(i + 2, 3)
30 Bsh.Range(Bsh.Cells(12, 6), Bsh.Cells(12, 12)).HorizontalAlignment = xlLeft
31 Bsh.Range(Bsh.Cells(12, 6), Bsh.Cells(12, 12)).NumberFormatLocal = “[$-ja-JP]ggge""年""m""月""d""日"""
32 ""’担当者を転記""’
33 Bsh.Cells(13, 6) = Ash.Cells(i + 2, 4)
34 Bsh.Cells(13, 6).HorizontalAlignment = xlLeft
35 ""’記事を転記""’
36 Bsh.Cells(14, 6) = Ash.Cells(i + 2, 5)
37 Bsh.Cells(14, 6).HorizontalAlignment = xlLeft
38 ""’住所1を転記""’
39 Bsh.Cells(6, 36) = Ash.Cells(i + 2, 6)
40 Bsh.Cells(6, 36).HorizontalAlignment = xlRight
41 ""’住所2を転記""’
42 Bsh.Cells(7, 36) = Ash.Cells(i + 2, 7)
43 Bsh.Cells(7, 36).HorizontalAlignment = xlRight
44 ""’所属を転記""’
45 Bsh.Cells(8, 36) = Ash.Cells(i + 2, 8)
46 Bsh.Cells(8, 36).HorizontalAlignment = xlRight
47 ""’電話1を転記""’
48 Bsh.Cells(9, 36) = Ash.Cells(i + 2, 9)
49 Bsh.Cells(9, 36).HorizontalAlignment = xlRight
50 Bsh.Cells(9, 36).NumberFormatLocal = “@"
51 ""’電話2を転記""’
52 Bsh.Cells(10, 36) = Ash.Cells(i + 2, 10)
53 Bsh.Cells(10, 36).HorizontalAlignment = xlRight
54 Bsh.Cells(10, 36).NumberFormatLocal = “@"
55 Const cnsTitle = “ファイル名一覧取得"
56 Const cnsDIR = “\*.*"
57 Dim xlAPP As Application
58 Dim strPath As String
59 StriDim strFilename As ng
60 Dim zukei As Shape
61 Dim myFileName As String
62 Dim syasin As String
63 Dim Path As String
64 For Each sa In Bsh.Shapes
65 On Error Resume Next
66 If sa.TopLeftCell.Address >= Bsh.Cells(1, 1).Address Then
67 sa.Delete
68 End If
69 If Err <> 0 Then
70 Err.Clear
71 End If
72 Next
73 '張り付ける写真のフォルダを取得
74 strPath = Ash.Cells(i + 2, 11)
75 ' フォルダの存在確認 — 必要な場合のみ記述 —
76 If Dir(strPath, vbDirectory) = “" Then
77 MsgBox “指定のフォルダは存在しません。", vbExclamation, cnsTitle
78 Exit Sub
79 End If
80 ' 先頭のファイル名の取得
81 strFilename = Dir(strPath & cnsDIR, vbNormal)
82 ' ファイルが見つからなくなるまで繰り返す
83 Do While strFilename <> “"
84 ' 行を加算
85 GYO = GYO + 18
86 Bsh.Cells(GYO + 3, 23).Value = strFilename
87 ' 次のファイル名を取得
88 strFilename = Dir()
89 Loop
90 For j = 21 To G Step 18
91 Bsh.Range(Bsh.Cells(j, 4), Bsh.Cells(j + 13, 19)).Select
92 Dim tate As Single
93 Dim yoko As Single
94 Dim Top As Single
95 Dim Left As Single
96 tate = Selection.Height
97 yoko = Selection.Width
98 Top = ActiveCell.Top
99 Left = ActiveCell.Left
100 syasin = strPath & “\" & Bsh.Cells(j, 23).Value
101 Set GetPic = Bsh.Shapes.AddPicture(syasin, False, True, Left, Top, -1, -1)
102 GetPic.Width = GetPic.Width * (tate / GetPic.Height)
103 GetPic.Height = tate
104 GetPic.Left = Left
105 Next j
106 Go = Bsh.Cells(Rows.Count, 23).End(xlUp).Row
107 PeNu = Application.WorksheetFunction.RoundUp(Go / 54, 0)
108 Bsh.PageSetup.PrintArea = Bsh.Range(Bsh.Cells(1, 1), Bsh.Cells((54 * PeNu), 37)).Address
109 Bsh.PrintPreview
110 End Sub

 

資料作成自動化マクロの導入で得られる効果

この資料作成自動化マクロは私の職場に導入しています。このマクロ導入後、次のような効果を得ることができました。

 

  • エクセル操作が苦手な方も作業できるようになった
  • 資料の出来上がりがキレイになり、仕上がりが統一された
  • 編集ミスが激減した
  • 過去の資料を簡単に検索できるようになった
  • 作業スピードが上がり、仕事に余裕ができた

いろんなメリットがありますが、私にとっての1番のメリットは資料作成業務のストレスが減ったことです。

マクロ導入前は作業スピードや出来栄えに個人差がありましたが、マクロ導入後は誰でも簡単に同じ出来栄えの資料を作成できるようになりました。

 

写真を貼り付けるマクロ

指定するフォルダ内にある写真データをエクセルに貼り付けるマクロです。

指定するフォルダ内の写真を自動で貼り付けるマクロがどのような処理をするか!を動画で説明しています。マクロがいかに便利なツールであるのかをわかっていただけると思います。是非参考にしてみてください。

 

写真を貼り付けるマクロの使い方

1.設定シートで写真が保存されているフォルダ場所を入力する

2.写真シートでマクロを実行する

たったこれだけで写真を貼り付けるマクロを使用することができます。

 

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

1 Sub 写真挿入横()
2 Dim Ash As Worksheet
3 Set Ash = Sheets(“設定")
4 Dim Csh As Worksheet
5 Set Csh = Sheets(“写真(横)")
6 Const cnsTitle = “ファイル名一覧取得"
7 Const cnsDIR = “\*.*"
8 Dim xlAPP As Application
9 Dim strPath As String
10 Dim strFilename As String
11 Dim GYO As Long
12 Dim zukei As Shape
13 Dim myFileName As String
14 Dim syasin As String
15 Dim Path As String
16 rm = Csh.Cells(Rows.Count, 25).End(xlUp).Row
17 For Each sa In Csh.Shapes
18 On Error Resume Next
19 If sa.TopLeftCell.Address >= Csh.Cells(1, 1).Address Then
20 sa.Delete
21 End If
22 If Err <> 0 Then
23 Err.Clear
24 End If
25 Next
26 For i = 3 To rm Step 21
27 Csh.Range(Csh.Cells(i, 25), Csh.Cells(i + 2, 38)).ClearContents
28 Next
29 Set xlAPP = Application
30 strPath = Ash.Cells(3, 1)
31 If Dir(strPath, vbDirectory) = “" Then
32 MsgBox “指定のフォルダは存在しません。", vbExclamation, cnsTitle
33 Exit Sub
34 End If
35 strFilename = Dir(strPath & cnsDIR, vbNormal)
36 Do While strFilename <> “"
37 GYO = GYO + 21
38 Csh.Cells(GYO – 18, 25).Value = strFilename
39 strFilename = Dir()
40 Loop
41 For i = 1 To rm Step 21
42 Csh.Cells(i + 2, 2).Select
43 syasin = Ash.Cells(3, 1) & “\" & Csh.Cells(i + 2, 25).Value
44 Csh.Pictures.Insert syasin
45 Csh.Pictures.Top = Range(Csh.Cells(i + 2, 2), Csh.Cells(i + 20, 23)).Top
46 Csh.Pictures.Left = Range(Csh.Cells(i + 2, 2), Csh.Cells(i + 20, 23)).Left
47 Csh.Pictures.Height = Range(Csh.Cells(i + 2, 2), Csh.Cells(i + 20, 23)).Height
48 Next i
49 End Sub

 

写真を貼り付けるマクロの導入にるよる効果

写真を貼り付けるマクロを導入することでいろんな効果を得ることができます。

 

  • 複数の写真をまとめて貼り付けることができる
  • 貼り付けた写真の大きさ、場所を自動で調整できる
  • 貼り付け写真の名前を自動で記載できる

下記の記事で、写真の貼り付けマクロを詳しく紹介しています。

記事では、写真を貼り付けるマクロの設定の方法やSheetの様式設定など詳しく説明しています。エクセルに写真を貼り付ける作業が多い方におすすめのマクロです。下記のサイトでは写真の貼り付けマクロが設定されたエクセルファイルをダウンロードすることができます。

すぐにでも写真を貼り付けるマクロを使ってみたい!という方は参考にしてみてください。

 

シートからシートにテキストを転記するマクロ

シート名を取得するVBAを使って、シートからシートに情報を反映させる!というマクロです。

シートからシートへテキストを転記するマクロがどのような処理をするか!を動画で説明しています。テキストの転記マクロは仕事で最も使われるマクロです。1種類の書類に対してエクセルファイルをコピペしてどんどん増えてしまう!というやり方をカイゼンすることができます。

転記マクロの使い方

1.設定シートで必要事項を全て入力

 

2.ユーザーフォームに設定シートのA列の番号を入力し、実行ボタンをクリック

使い方はたったこれだけです。設定シートに入力した各項目が該当する場所に自動的に反映されます。このマクロを使えば、様式の決められた書類作成業務の効率をアップさせることができます。

転記マクロのサンプル

1 Sub 工事契約書転記()
2 ""Sheetの設定""""
3 Dim Ash As Worksheet
4 Dim Bsh As Worksheet
5 Set Ash = ThisWorkbook.Worksheets(“一覧表")
6 Set Bsh = ThisWorkbook.Worksheets(“工事契約書")
7 "’ユーザーフォームで入力した値を変数iで取得"""
8 i = UserForm1.TextBox1.Value
9 "’一覧表から工事契約書へ値を転記する"""
10 ""’工事名を転記""’
11 Bsh.Range(“H6") = Ash.Cells(i + 2, 2)
12 Bsh.Range(“H6").HorizontalAlignment = xlLeft
13 ""’工事場所を転記""’
14 Bsh.Range(“H8") = Ash.Cells(i + 2, 3)
15 Bsh.Range(“H8").HorizontalAlignment = xlLeft
16 ""’工期(着手)を転記""’
17 Bsh.Range(“H10") = Ash.Cells(i + 2, 4)
18 Bsh.Range(“H10").HorizontalAlignment = xlCenter
19 Bsh.Range(“H10").NumberFormatLocal = “ggge年m月d日"
20 ""’工期(竣功)を転記""’
21 Bsh.Range(“P10") = Ash.Cells(i + 2, 5)
22 Bsh.Range(“P10").HorizontalAlignment = xlCenter
23 Bsh.Range(“P10").NumberFormatLocal = “ggge年m月d日"
24 ""’請負金額を転記""’
25 Bsh.Range(“L12") = Ash.Cells(i + 2, 6)
26 Bsh.Range(“L12").HorizontalAlignment = xlCenter
27 Bsh.Range(“L12").NumberFormatLocal = “#,###"
28 ""’消費税を転記""’
29 Bsh.Range(“R14") = Bsh.Range(“L12").Value * 0.1
30 Bsh.Range(“R14").HorizontalAlignment = xlCenter
31 Bsh.Range(“R14").NumberFormatLocal = “#,###"
32 ""’発注者住所を転記""’
33 Bsh.Range(“J33") = Ash.Cells(i + 2, 8)
34 Bsh.Range(“J33").HorizontalAlignment = xlLeft
35 ""’発注者氏名を転記""’
36 Bsh.Range(“J35") = Ash.Cells(i + 2, 7)
37 Bsh.Range(“J35").IndentLevel = 2
38 ""’受注者住所を転記""’
39 Bsh.Range(“J37") = Ash.Cells(i + 2, 10)
40 Bsh.Range(“J37").HorizontalAlignment = xlLeft
41 ""’受注者氏名を転記""’
42 Bsh.Range(“J39") = Ash.Cells(i + 2, 9)
43 Bsh.Range(“J39").IndentLevel = 2
44 End Sub

 

転記マクロ導入による効果

転記マクロは、様式の決められた書類作成業務で効果が発揮されます。

 

  • 編集ミスを軽減できる
  • 過去の情報を参考にできる
  • 誰が資料を作成しても同じ仕上がりにできる

転記マクロを導入することで上記のような効果を得ることができます。

下記のサイトでは、転記マクロが設定されたエクセルファイルをダウンロードしてお使いいただけます。転記マクロを使ってエクセル作業の効率を今すぐにでもアップさせたいという方におすすめです。

 

印刷マクロ

印刷設定を自動的に行うマクロです。

連続で書類を印刷するマクロがどのような処理をするか!を動画で説明しています。転記マクロでテキストを編集→印刷、再度転記マクロでテキストを編集→印刷を繰り返す!という内容です。連続印刷マクロについては下記の記事で詳しく紹介しています。

 

連続印刷マクロの使い方

使い方は、上記で紹介した転記マクロの使い方とほとんど一緒ですが、マクロを実行した後の結果が異なります。

実行すると、入力した番号に該当する書類の印刷まで行います。

この連続印刷マクロは、様式の決められた書類をまとめて印刷したい!というときに便利です。

 

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

1 Sub 工事契約書転記()
2 "’Sheetの設定"’
3 Dim Ash As Worksheet
4 Dim Bsh As Worksheet
5 Set Ash = ThisWorkbook.Worksheets(“一覧表")
6 Set Bsh = ThisWorkbook.Worksheets(“工事契約書")
7 "’ユーザーフォームで入力した値を変数jで取得 "’
8 For j = 1 To 5
9 If UserForm1(“TextBox" & j).Value <> “" Then
10 i = UserForm1(“TextBox" & j).Value
11 "’一覧表から工事契約書へ値を転記する"’
12 ""’工事名を転記"’
13 Bsh.Range(“H6") = Ash.Cells(i + 2, 2)
14 Bsh.Range(“H6").HorizontalAlignment = xlLeft
15 "’工事場所を転記"’
16 Bsh.Range(“H8") = Ash.Cells(i + 2, 3)
17 Bsh.Range(“H8").HorizontalAlignment = xlLeft
18 "’工期(着手)を転記"’
19 Bsh.Range(“H10") = Ash.Cells(i + 2, 4)
20 Bsh.Range(“H10").HorizontalAlignment = xlCenter
21 Bsh.Range(“H10").NumberFormatLocal = “ggge年m月d日"
22 "’工期(竣功)を転記"’
23 Bsh.Range(“P10") = Ash.Cells(i + 2, 5)
24 Bsh.Range(“P10").HorizontalAlignment = xlCenter
25 Bsh.Range(“P10").NumberFormatLocal = “ggge年m月d日"
26 "’請負金額を転記"’
27 Bsh.Range(“L12") = Ash.Cells(i + 2, 6)
28 Bsh.Range(“L12").HorizontalAlignment = xlCenter
29 Bsh.Range(“L12").NumberFormatLocal = “#,###"
30 "’消費税を転記"’
31 Bsh.Range(“R14") = Bsh.Range(“L12").Value * 0.1
32 Bsh.Range(“R14").HorizontalAlignment = xlCenter
33 Bsh.Range(“R14").NumberFormatLocal = “#,###"
34 "’発注者住所を転記"’
35 Bsh.Range(“J33") = Ash.Cells(i + 2, 8)
36 Bsh.Range(“J33").HorizontalAlignment = xlLeft
37 "’発注者氏名を転記"’
38 Bsh.Range(“J35") = Ash.Cells(i + 2, 7)
39 Bsh.Range(“J35").IndentLevel = 2
40 "’受注者住所を転記"’
41 Bsh.Range(“J37") = Ash.Cells(i + 2, 10)
42 Bsh.Range(“J37").HorizontalAlignment = xlLeft
43 "’受注者氏名を転記"’
44 Bsh.Range(“J39") = Ash.Cells(i + 2, 9)
45 Bsh.Range(“J39").IndentLevel = 2
46 ActiveSheet.PageSetup.PrintArea = (“A1:X39")
47 ActiveSheet.PrintOut
48 Else
49 End If
50 Next
51 End Sub

 

連続印刷マクロの導入による効果

連続印刷マクロはあらゆるエクセル作業に応用することができます。印刷マクロを設定することで作業効率がアップします。私の職場ではあらゆるエクセルファイルに印刷マクロを設定しています。

 

  • 請求書・領収書作成用のエクセルファイル
  • 工事書類作成用のエクセルファイル
  • 申請書類作成用のエクセルファイル

時代遅れではありますが、私の職場は、紙で印刷した書類で上司の承認をもらって押印してもらうルールになっています。そのためエクセルで作成したほとんどの資料を印刷しなければなりません。印刷マクロを設定することで、印刷にかかる作業時間をカットすることができるので職場ではかなり好評のマクロになっています。

 

エクセルVBAはエクセル作業の自動化に欠かせないツール

エクセル作業の効率をアップさせたいと考えたとき、エクセルVBAの導入は必要不可欠です。エクセルには、条件付き書式設定や関数・ドロップダウンリストというようなエクセルVBAを使わなくても作業効率が上がる便利な機能が搭載されています。

便利な機能ではあるものの、エクセルVBAと比べてしまうと自由度がかなり制限されてしまう!と私は思います。

エクセルVBAを使えば、思いついたいろんなアイデアを表現することができます。条件付き書式よりももっと複雑な条件を付加してセルの背景色を変更することだって可能です。

私は独学でエクセルVBAの勉強をして、今では作業効率アップに繋がるマクロをいくつも職場に導入できるくらいにまで上達しました。独学に使ったのはエクセルVBAの参考書とネットの情報だけです。この2つだけの情報でも十分仕事で役立つマクロを開発することができます。

下記の記事では、とてもわかりやすいと感じたエクセルVBAの参考書を紹介しています。

後輩や上司にもおすすめして好評だった参考書ばかりなので、これからエクセルVBAの勉強をはじめようと方は是非参考にしてみてください。