エクセル作業を自動化するマクロを作りたい方必見【実務で役立つエクセルマクロの参考書】
豆父ちゃん
こんな要望にお応えします。
この記事では、エクセルマクロの存在を全く知らない状態から仕事でいくつもの自動化マクロを導入できるようになった私が役に立ったと感じるエクセルマクロの参考書を紹介します。
注意点として、エクセルVBAについて深く勉強をしたい!という方向けの内容の参考書ではありません。あくまで、初心者の方が仕事で使えるマクロを作成できるようになるための参考書を紹介しています。
マクロを作成するにあたり変数や引数といった難しいプログラムを扱うことになりますが、これらを100%理解せずともマクロは作れます。
この記事では、VBAを深く勉強をするための教科書ではなく、仕事でエクセル業務を自動化するためのマクロを作成できるようにる参考書を紹介しています。
仕事でエクセルをよく扱う方、仕事の効率を上げたいと考えている方におすすめの参考書になっています。
マクロに触れたことのない初心者の方におすすめの参考書
エクセルVBAってなに?エクセル作業の自動化なんてできるの?というようなエクセルVBA初心者の方にピッタリの参考書をご紹介します。
Excel VBAの絵本
2ページで1つの話を完結させる!という構造になっているので、ページをいったりきたりさせるストレスが全くありません。難しいプログラムの理解を深めるというよりも、イメージでVBAの勉強をすることができる!という参考書です。
日頃エクセルは扱っているけど、VBAなんて開いたことも見たこともない!という方がほとんどだと思います。エクセルVBAはパソコンにエクセルソフトが入っていれば誰でもすぐに始められるプログラミングです。
仕事の効率を上げたい!キャリアアップしたい!と考えている方はエクセルVBAを勉強してみてはいかがでしょうか。
複雑なマクロを作りたい方におすすめの参考書
エクセルVBAで簡単なマクロは作成できるようになった。さらに便利なマクロを開発できるようになりたい!というような方にピッタリの参考書をご紹介します。
Excel VBA コードレシピ集
この本の特徴は、エクセルVBAの基礎だけを勉強しても気づくことができないテクニックがいっぱい紹介されているということです。「〇〇したい」という要望を解決するマクロを紹介していく構成になっています。
この参考書で紹介されている「〇〇したい」を誰しも一度は自動化できたらいいのにと感じたことがある項目ばかりのはずです。
私は毎日エクセルを操作しなければならない仕事をしていて、参考書で紹介されている以下の「〇〇したい」を応用して作業効率アップに繋がるマクロを職場に導入しました。
- 日付から年月日や時分秒の値を取り出したい
- 指定日が休日かどうかを判定したい
- 指定セルが画面左上に来るようスクロールさせたい
ほかにも作業効率アップに繋がるような凄いテクニックが数多く紹介されています。今よりも1ステップ上のマクロを開発したい!という方におすすめの参考書です。
エクセル作業で毎日マクロの編集を行う方におすすめの参考書
毎日マクロを使って仕事をしている方にピッタリの参考書をご紹介します。
即効! 仕事に役立つマクロ/VBAワザ! Excel 365/2019/2016/2013対応
即効! 仕事に役立つマクロ
- セルの操作
- テキストの操作
- 罫線の操作
- 列・行の操作
- ワークシートとワークブックの操作
- 作成したマクロの実行方法
この参考書があれば、だいたいのエクセル作業の自動化をマクロを使って行うことができるようになります。
「あのマクロの書き方忘れちゃった」、「この処理に必要なマクロなんだっけ?」というような、ちょっとした調べものをするときにとても便利、さらに今まで考えもしなかった発想がこの参考書から得られるはず。
仕事で役立つマクロをどんどん導入していきたい!と考えている方におすすめの参考書です。
参考書のネットの情報だけで作成した自動化マクロ
私は上記で紹介している参考書とネットの情報でエクセルVBAについて勉強をしています。今では作業効率アップに繋がるエクセルマクロをいくつも開発できるまでに上達しました。職場に導入して好評だったエクセルマクロがどういうものなのかいくつか紹介します。
写真を自動で貼り付けるエクセルマクロ
フォルダ内に保存されている写真データをエクセルに貼り付けるマクロです。貼り付ける際、写真の大きさと表示位置を自動で調整してくれるので編集の手間がいりません。
さらに、写真データの名前を表示する仕様になっています。
写真を貼り付けるマクロのサンプルマクロ
| 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 |
サンプルマクロは、実行に必要なユーザーフォームの設定やシートの設定などは記載されていません。写真を貼り付けるマクロについてもっと詳しく知りたい!という方は下記のこちらの記事を参考にしてください。
下記のサイトでは、写真を貼り付けるマクロをダウンロードしてお使い頂けます。このエクセルは、A4一枚に写真を3枚貼り付ける仕様になっています。様式を変更したい!貼り付ける写真を小さくして枚数を増やしたい!などの要望がありましたらお気軽にお問合せ下さい。
シートからシートに情報を転記するエクセルマクロ
シートからシートに情報を転記して伝票を作成するマクロです。氏名、住所など基本情報を入力するシートから伝票や領収書などのシートに必要な情報を転記する!という仕組みになっています。
このマクロは、同じ宛名や住所をいろんな種類の書類に入力する作業への導入がおすすめです。例えば、請求書、売上伝票、領収書、見積書といった書類は宛名や住所、金額がそれぞれ同じものが入力されることがほとんどです。転記マクロを使うとこのような書類をまとめて作成することができます。
複数の書類作成を手入力で行なっていれば、入力ミスやコピペミスが発生する可能性があります。
転記マクロを使えば、基本情報は手入力する必要がありますが、ほかの書類へ入力は全てマクロが自動で行なってくれます。
シートからシートへ情報を転記するマクロのサンプル
| 1 | Sub 伝票転記() |
| 2 | Dim Ash As Worksheet |
| 3 | Dim Bsh As Worksheet |
| 4 | Set Ash = ThisWorkbook.Worksheets(“一覧表") |
| 5 | Set Bsh = ThisWorkbook.Worksheets(“伝票") |
| 6 | "’ユーザーフォームで入力した値を変数i,jで取得"" |
| 7 | Dim i As Date |
| 8 | i = UserForm1.TextBox1.Value |
| 9 | j = UserForm1.ListBox1.Value |
| 10 | gyoa = Ash.Cells(Rows.Count, 1).End(xlUp).Row |
| 11 | gyob = Bsh.Cells(Rows.Count, 2).End(xlUp).Row |
| 12 | Bsh.Range(Cells(6, 1), Cells(6, 10)).ClearContents |
| 13 | Bsh.Range(Cells(10, 2), Cells(gyob + 1, 10)).ClearContents |
| 14 | Bsh.Range(Cells(10, 11), Cells(gyob + 1, 15)).ClearContents |
| 15 | Bsh.Range(Cells(10, 16), Cells(gyob + 1, 19)).ClearContents |
| 16 | Bsh.Range(Cells(10, 20), Cells(gyob + 1, 23)).ClearContents |
| 17 | Bsh.Range(Cells(10, 24), Cells(gyob + 1, 27)).ClearContents |
| 18 | Bsh.Range(Cells(10, 28), Cells(gyob + 1, 33)).ClearContents |
| 19 | Bsh.Range(Cells(26, 22), Cells(26, 24)).ClearContents |
| 20 | Bsh.Range(Cells(26, 14), Cells(26, 19)).ClearContents |
| 21 | Bsh.Range(Cells(26, 28), Cells(26, 33)).ClearContents |
| 22 | For k = 3 To gyoa |
| 23 | gyob = Bsh.Cells(Rows.Count, 2).End(xlUp).Row |
| 24 | If Ash.Cells(k, 1) = i And Ash.Cells(k, 2) = j Then |
| 25 | Bsh.Cells(6, 1) = j |
| 26 | Bsh.Cells(gyob + 1, 2) = Ash.Cells(k, 3) |
| 27 | Bsh.Cells(gyob + 1, 11) = Ash.Cells(k, 4) |
| 28 | Bsh.Cells(gyob + 1, 16) = Ash.Cells(k, 5) |
| 29 | Bsh.Cells(gyob + 1, 20) = Ash.Cells(k, 6) |
| 30 | Bsh.Cells(gyob + 1, 24) = Ash.Cells(k, 7) |
| 31 | Bsh.Cells(gyob + 1, 28) = Ash.Cells(k, 8) |
| 32 | Else |
| 33 | End If |
| 34 | Next |
| 35 | Bsh.Cells(26, 22) = Ash.Cells(3, 9) |
| 36 | Bsh.Cells(26, 14) = Application.WorksheetFunction.Sum(Range(Cells(10, 24), Cells(gyob, 24))) |
| 37 | Bsh.Cells(26, 28) = Bsh.Cells(26, 14) * (Bsh.Cells(26, 22) / 100 + 1) |
| 38 | End Sub |
サンプルマクロは、実行に必要なユーザーフォームの設定やシートの設定などは記載されていません。写真を貼り付けるマクロについてもっと詳しく知りたい!という方はこちらの記事を参考にしてください。
下記のサイトでは、シートからシートへ情報を転記するマクロをダウンロードしてお使い頂けます。転記先の様式を変更したい!などの要望がありましたらお気軽にお問合せください。
複数のエクセルファイルを一つにまとめるエクセルマクロ
複数のエクセルファイルを一つにまとめるマクロです。
使い方は設定シートにコピーしたいエクセルファイルが保存されている場所を入力し、マクロを実行するだけです。
実行すると、場所を指定したエクセルファイルの情報(全てのシート)を一つのエクセルファイルに集約することができます。
仕事で、「過去10年分の請求書のデータをまとめてほしい!」と上司から指示されました。請求書のデータは年度毎に別々のエクセルファイルで作られていたので、開く→コピペ→閉じる→開くという繰り返し作業が必要になりめんどうでなりませんでした。
こんな手間と時間のかかる繰り返し作業はマクロを使って完全自動化してしまおうと考え、複数のエクセルファイルを一つにまとめるマクロを開発しました。
複数のエクセルファイルを一つにまとめるマクロのサンプル
| 1 | Sub テスト() |
| 2 | Application.ScreenUpdating = False |
| 3 | Dim Abook As Workbook |
| 4 | Set Abook = ActiveWorkbook |
| 5 | Set Ash = Abook.Worksheets(“設定") |
| 6 | For k = 3 To 20 |
| 7 | Dim exfile As String |
| 8 | If Ash.Cells(k, 2) = “" Then |
| 9 | Exit Sub |
| 10 | Else |
| 11 | exfile = Ash.Cells(k, 2) |
| 12 | End If |
| 13 | Workbooks.Open Filename:=exfile |
| 14 | If Err.Number > 0 Then |
| 15 | MsgBox “ファイルはすでに開かれています。" |
| 16 | Exit Sub |
| 17 | End If |
| 18 | Dim Bbook As Workbook |
| 19 | Set Bbook = ActiveWorkbook |
| 20 | For i = 1 To Bbook.Worksheets.Count |
| 21 | Bbook.Worksheets(i).Copy After:=Abook.ActiveSheet |
| 22 | Abook.ActiveSheet.Name = Abook.ActiveSheet.Name & “(" & Bbook.Name & “)" |
| 23 | Next i |
| 24 | Bbook.Close |
| 25 | Next k |
| 26 | End Sub |
サンプルマクロの設定やシートの設定は、こちらの記事で詳しく紹介しています。ほかにも記事では、指定するフォルダ内に保存されている全てのエクセルファイルを一つにまとめるマクロも紹介されています。エクセルファイルを一つ一つ指定するのではなく、フォルダ内にあるエクセルファイルをいっきに情報を集約したい!というときに便利です。
下記のサイトでは、複数のエクセルファイルを一つにまとめるマクロをダウンロードしてお使いいただけます。情報を一つのエクセルファイルにまとめる作業に時間を費やしている方におすすめです。
参考書とネットの情報だけでこれだけのエクセルマクロを開発することができます。仕事でエクセルを操作することが多い!という方は今のうちにエクセルVBAの勉強をしてみてはいかがでしょうか。
今となっては職場にいくつもの作業効率化マクロを導入するようになりましたが、簡単なマクロしか開発できない頃は自分のパソコン内で使うエクセルにだけマクロを導入していました。
自分だけのエクセルマクロを使っていると、私のエクセル作業のスピードだけがどんどん速くなり、上司から職場の誰もが扱えるマクロを使ってくれ!とお願いされるようになりました。
エクセルVBAを扱えるようになると、多くのメリットを得ることができます。是非エクセルVBAの勉強をスタートさせましょう。