エクセルでの資料作成を自動化(写真の貼り付け・テキスト転記・印刷マクロの導入)
こんな要望にお応えします。
結論から言うと、写真貼り付けマクロ、転記マクロ、印刷マクロを組み合わせて自動化する!ということです。
この記事で紹介する資料作成とは、エクセルに写真データを添付して作成する資料作りのことをいいます。写真を貼り付けて資料を作成する際、写真の大きさや位置を調整したり写真の名前を記入したりしなければなりません。ほかにも氏名や日時の編集が必要になることがほとんどです。
必要事項の編集と写真の貼り付け両方の処理が必要になると時間がかかるしミスの発生も多くなります。
そんな手間と時間のかかる写真の貼り付けが必要な資料作成を自動化するマクロをご紹介します。
写真付き資料の作成を自動化するマクロとは
シートからシートへ情報を転記するマクロ、指定するフォルダ内の写真データを貼り付けるマクロ、印刷プレビューを自動で表示するマクロを組み合わせたものです。
資料作成自動化マクロの使い方
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の勉強をはじめようと方は是非参考にしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません