取引先に資料送付状を作成して印刷する作業があります。
たとえば上記のような資料送付状の作成・印刷です。
この資料送付状を作成するためには、日付や取引先の入力が必要です。
取引先への資料のため、ミスがないように作成することが求められます。
しかし、どうしても入力ミスしたり記載が漏れたりしてしまうものです。
そこでマクロを使って、資料送付状の作成と印刷を効率化してみます。
・マクロで作成時間を短縮させる
・VBAプログラム入りのエクセルをダウンロード可能
ページ下部で、このページで紹介しているVBAプログラムをダウンロードすることもできますので、ぜひお仕事にご活用ください。
目次
- 1 資料送付状(Word)作成を効率化するマクロ
- 2 資料送付状(Word)作成マクロのメリット
- 3 VBA入りのエクセルファイルをダウンロード
- 4 チェックリストを作成マクロ
- 5 VBA作成前の事前準備
- 6 VBAのプログラムソース解説
- 6.1 プログラム0|変数宣言の指定
- 6.2 プログラム1|プログラム開始
- 6.3 プログラム2|シート設定
- 6.4 プログラム3|未記入欄の確認
- 6.5 プログラム4|資料名と部数を取得
- 6.6 プログラム5|資料名と部数の文字列を結合
- 6.7 プログラム6|{資料}とshiryoをエクセルに出力
- 6.8 プログラム7|必要情報を取得
- 6.9 プログラム8|プログラム6で出力したデータをエクセルから削除
- 6.10 プログラム9|ワード起動
- 6.11 プログラム10|テンプレートワードのパス取得
- 6.12 プログラム11|テンプレートワードを開く
- 6.13 プログラム12|テンプレートワードにmydataの情報を挿入
- 6.14 プログラム13|送付状のワードファイルを新しいファイルで保存
- 6.15 プログラム14|ワードファイルを最前面に出す
- 6.16 プログラム15|データを差し込んだワードを印刷
- 6.17 プログラム16|オブジェクト解放
- 6.18 プログラム17|プログラム終了
- 7 Excel VBAについて詳しく理解したいなら
- 8 VBAを自分で書けるようになる
資料送付状(Word)作成を効率化するマクロ
このページでは、仕事で使う資料送付状を自動作成するマクロを紹介します。
マクロで自動化することで仕事量を減らすことができるだけではなく、コピペミスや入力ミスを減らすことで確認作業を不要にできます。
手順2. エクセルに必要情報を入力
手順3. VBAプログラム実行
以下で詳しく説明します。
手順1. 資料送付状テンプレート(Word)を作成
この事例ではテンプレートとなる資料送付状(ワード)として上記の画像のものを準備しています。
内容としては、取引先に資料を送付する際に作成する鑑(カバーレター)です。
可変情報を置換できるようにテンプレートの文言を変更
可変情報となる箇所は以下の5つで、置換しやすいように文言を工夫をしています。
2. {取引先担当者}
3. {日付}
4. {備考}
5. {資料}
ここで紹介するテンプレートは、このページ内にあるフォームからダウンロード可能です。
ダウンロードして現物をご覧いただきながら、手順を確認すると理解が深まるかと思います。
手順2. エクセルに必要情報を入力
上記画像の1~5はワードの以下の文言と置換させるようにプログラムを組んでいます。
2. {取引先担当者}
3. {日付}
4. {備考}
5. {資料}
資料送付状に必要な情報をエクセルに入力します。
「入力必須」項目に記載がないとプログラム強制終了
入力欄横に「入力必須」と「空欄でも可」と記載しています。
「入力必須」項目は、記載がないとプログラムを途中で終了させるようにしています。
「空欄でも可」項目は、記載がなくてもプログラムは実行可能です。
入力必須の場合、プログラムを途中終了させる理由は、入力必須の項目が資料送付状の記載漏れと認識される項目だからです。
資料の品質を担保するために、プログラムを途中終了させる仕組みにしています。
手順3. VBAプログラム実行
「作成」のボタンで、VBAプログラムを実行します。
そうすると、以下のように資料送付状(Word)を作成・印刷します。
画像では印刷されたことがよく分かりづらいですが、印刷も行うプログラムも実装しています。
詳しくは後半のVBAプログラム解説をご覧ください。
また資料送付状は新しいワードファイルとして指定したフォルダに保管されます。
ボタンにVBAプログラムを登録
上記の画像では、VBAプログラムをボタンに登録しています。
ボタンにVBAプログラムを登録することで、ボタンを押下しプログラムを実行することができます。
ボタンをVBAプログラムを設定したい場合は、以下で動画も交えて設定方法を紹介しているので、そちらをご覧ください。
改善点
このページで紹介するプログラムですが、以下の改善点があります。
改善点1. 取引先名称や担当者をプルダウンリストで選択させる
取引先名称や担当者をプルダウンリストで選択できるようにすると、さらにミスを減らせる。
改善すべきポイントの一つは、自分で入力する箇所を減らすことにあります。
一つでも入力作業を減らすという点で一定の効果があるはずです。
改善点2. 連続印刷させる
複数の取引先に資料送付状を作成する場合があります。
このページのプログラムは、取引先が1つである場合を想定しています。
もし複数作成したいときは、連続印刷するマクロを作ることで対応することができます。
資料送付状を連続印刷したい場合は、以下の事例が参考になるかと思います。
差し込み印刷を行う事例ですので、興味があればご覧ください。
資料送付状(Word)作成マクロのメリット
メリット
2. 作成・印刷を効率化できる
3. 送付した資料をフォルダに保管させる
資料送付状作成をマクロ化することで、上記のような利点があります。
年間数百時間のような劇的な改善効果は期待できませんが、資料送付状を頻繁に作成するような事務作業が多い人には地味にありがたい機能です。
この仕組みを作っておくことで、人に作業をお願いしやすくもなります。
リモート環境になって、このような印刷作業は減っている会社もあるかと思います。
だからこそ、必要になったとき作業を忘れて失敗しないようにマクロで仕組み化しておくと、安心して作業をすることができます。
デメリット
この事例では、出来る限り入力ミスや記載漏れを減らすことを意識してマクロを作ってみました。
しかしお気づきのとおり、入力ミスや記載漏れをゼロにはできないです。
上記で改善点をいくつか列挙しましたが、参考にしていただければと思います。
VBA入りのエクセルファイルをダウンロード
以下で紹介しているVBAプログラムをそのまま使いたい人は、以下のフォームからダウンロードできます。
登録したメールアドレスへ「VBAプログラムが含まれたエクセル」を送信します。
本プログラムの内容をそのまま使用可能です。ぜひお仕事にお役立てください。
チェックリストを作成マクロ
ここでは月別(毎日)のチェックリストを作成するマクロを紹介しました。
以下のページでは毎週のチェックリストを作成するマクロを紹介しています。
チェックリスト作成は、マクロの入門としても適度なレベルのため、マクロが苦手意識がある人もぜひ挑戦していただきたいです。
それでは、以下でプログラムについて詳細を説明します。
VBA作成前の事前準備
ExcelでVBAを使うためにはいくつかの準備が必要です。
具体的には以下です。
準備2. VBEで外部ライブラリへの参照設定(Word操作)を追加
上記の2つに関して、以下で説明します。
準備1. ExcelでVBAを使うための事前準備
Excelで、以下の2つの準備をします。
2. 開発タブを追加
保存ファイルの拡張子変更、Excelの基本設定変更の2つです。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下の記事で解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
準備2. VBEで外部ライブラリへの参照設定(Word操作)を追加
参照設定とは、機能拡張させること、です。
Microsoft Word 15.0 Object Libraryにチェックを入れることで、Word操作の設定ができるようになります。バージョンによっては、15.0ではないときがあります。もし15.0ではなく、数字が小さい場合は、それにチェックを入れましょう。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Word 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック
詳細はこちらの画像の通りです。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Word 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック
VBAのプログラムソース解説
今回紹介するプログラムの概要は以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
'プログラム0|変数設定の指定 Option Explicit 'プログラム1|プログラム開始 Sub CreateCoverLetter() 'プログラム2|シート設定 Dim ws1 As Worksheet Set ws1 = ThisWorkbook.Worksheets("フォーム") 'プログラム3|未記入欄の確認 If ws1.Range("C4").Value = "" Or ws1.Range("D4").Value = "" Then MsgBox "必須項目に未記入欄があります" Exit Sub End If If ws1.Range("C16").Value = "" Or ws1.Range("C17").Value = "" Or ws1.Range("C18").Value = "" Then MsgBox "必須項目に未記入欄があります" Exit Sub End If 'プログラム4|資料名と部数を取得 Dim mydocument As Variant mydocument = ws1.Range("C4:D13").Value 'プログラム5|資料名と部数の文字列を結合 Dim k As Long, shiryo As String For k = LBound(mydocument) To UBound(mydocument) If mydocument(k, 1) <> "" Or mydocument(k, 2) <> "" Then shiryo = shiryo & vbCrLf & "■ " & mydocument(k, 1) & vbTab & mydocument(k, 2) & "部" End If Next 'プログラム6|{資料}とshiryoをエクセルに出力 ws1.Range("B20").Value = "{資料}" ws1.Range("C20").Value = shiryo 'プログラム7|必要情報を取得 Dim mydata As Variant mydata = ws1.Range("B16:C20").Value 'プログラム8|プログラム6で出力したデータをエクセルから削除 ws1.Range("B20:C20").ClearContents 'プログラム9|ワード起動 Dim wdapp As Word.Application Set wdapp = CreateObject("Word.application") wdapp.Visible = True 'プログラム10|テンプレートワードのパス取得 Dim path As String path = ThisWorkbook.path & "\00_資料送付状テンプレート.docx" 'プログラム11|テンプレートワードを開く Dim wddoc As Word.Document Set wddoc = wdapp.Documents.Open(path) Dim waittime As Variant waittime = Now + TimeValue("0:00:03") Application.Wait waittime 'プログラム12|テンプレートワードにmydataの情報を挿入 Dim i As Long For i = LBound(mydata) To UBound(mydata) With wddoc.Content.Find .Text = mydata(i, 1) .Replacement.Text = mydata(i, 2) .Execute Replace:=wdReplaceAll End With Next 'プログラム13|送付状のワードファイルを新しいファイルで保存 Dim filename As String, filepath As String filename = Format(mydata(3, 2), "yyyy-mm-dd") & "_" & mydata(1, 2) & ".docx" filepath = ThisWorkbook.path & "\00_資料送付状\" & filename wddoc.SaveAs2 filepath 'プログラム14|ワードファイルを最前面に出す wdapp.WindowState = wdWindowStateMinimize wdapp.WindowState = wdWindowStateNormal 'プログラム15|データを差し込んだワードを印刷 wddoc.PrintOut 'プログラム16|オブジェクト解放 Set wddoc = Nothing Set wdapp = Nothing 'プログラム17|プログラム終了 End Sub |
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
これを入れておくと、変数を定義していない場合、エラーが出ます。
つまり、「Option Explicit」を入力しておくことで、たとえば「Dim i」をあらかじめ入力しないと、「i」という変数を使えません。
もし「Option Explicit」を入力しているのに、「Dim i」を書かずに「i = 1」と書くと、エラーメッセージが表示されます。
実は、この機能はあくまでオプションです。「Option Explicit」を入力しなくても、プログラムは動きます。
しかし、これを入れておくことで、変数の誤記によるエラーを防止することができます。
結果的に、プログラム作成速度が上がるので、「Option Explicit」を入力することを習慣化することをオススメします。
プログラム1|プログラム開始
1 |
Sub CreateCoverLetter() |
「Sub CreateCoverLetter()」のプログラムを開始することを意味します。
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
「Sub XXXX」の「XXXX」の部分がプロシージャ名です。
このプロシージャ名はあらゆる文字(アルファベット、ひらがな、漢字、数字など)が使用可能です。
ただし、プロシージャ名の先頭は数字を入れるとエラーとなります。
あとで見たときに、「何のプログラムだったのか?」とならないようにするためです。
なお、「()」の中には何も記入されていません。これは引数なしという意味です。なお、プログラム2-1では引数を受け取ってプログラムを実行します。
初心者の内は、引数ということが分からなくてもVBAプログラムを書くことは可能です。
興味があれば、「VBA 引数」で検索して調べてみてください。
プログラム2|シート設定
1 2 |
Dim ws1 As Worksheet Set ws1 = ThisWorkbook.Worksheets("フォーム") |
ws1をワークシート型で変数設定し、VBA入りが保存されているエクセルの「フォーム」シートをws1とします。
プログラム3|未記入欄の確認
1 2 3 4 5 6 7 8 9 |
If ws1.Range("C4").Value = "" Or ws1.Range("D4").Value = "" Then MsgBox "必須項目に未記入欄があります" Exit Sub End If If ws1.Range("C16").Value = "" Or ws1.Range("C17").Value = "" Or ws1.Range("C18").Value = "" Then MsgBox "必須項目に未記入欄があります" Exit Sub End If |
・セルC4
・セルD4
・セルC16
・セルC17
・セルC18
上記について、記入されているかどうかをチェックします。
もし未記入であれば、「必須項目に未記入欄があります」というメッセージを表示して、プログラムを強制終了させます。
プログラム4|資料名と部数を取得
1 2 |
Dim mydocument As Variant mydocument = ws1.Range("C4:D13").Value |
セル範囲(C4:D13)をmydocumentとして取得します。
mydocumentは二次元配列となります。
mydocumentに格納されているデータを確認してみます。
Debug.Printでチェック
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Dim mydocument As Variant mydocument = ws1.Range("C4:D13").Value Dim k As Long For k = LBound(mydocument) To UBound(mydocument) Debug.Print "k:" & k, "mydocument(k,1):" & mydocument(k, 1), "mydocument(k,2):" & mydocument(k, 2) Next >>>k:1 mydocument(k,1):請求書 mydocument(k,2):1 >>>k:2 mydocument(k,1):資料A mydocument(k,2):1 >>>k:3 mydocument(k,1):資料B mydocument(k,2):1 >>>k:4 mydocument(k,1): mydocument(k,2): >>>k:5 mydocument(k,1): mydocument(k,2): >>>k:6 mydocument(k,1): mydocument(k,2): >>>k:7 mydocument(k,1): mydocument(k,2): >>>k:8 mydocument(k,1): mydocument(k,2): >>>k:9 mydocument(k,1): mydocument(k,2): >>>k:10 mydocument(k,1): mydocument(k,2): |
上記のとおり、C4:D13を二次元配列として取得することができました。
プログラム5|資料名と部数の文字列を結合
1 2 3 4 5 6 |
Dim k As Long, shiryo As String For k = LBound(mydocument) To UBound(mydocument) If mydocument(k, 1) <> "" Or mydocument(k, 2) <> "" Then shiryo = shiryo & vbCrLf & "■ " & mydocument(k, 1) & vbTab & mydocument(k, 2) & "部" End If Next |
C4:D13の範囲内で、C列とD列の両方に記載がある行のみを対象として、以下のように文字列を結合します。
上記のように「shiryo = shiryo + XXX」とつなげることで、shiryoの末尾に文字列をつなげていくことができます。
Debug.Printでチェック
1 2 3 4 5 6 7 8 9 10 11 12 |
For k = LBound(mydocument) To UBound(mydocument) If mydocument(k, 1) <> "" Or mydocument(k, 2) <> "" Then shiryo = shiryo & vbCrLf & "■ " & mydocument(k, 1) & vbTab & mydocument(k, 2) & "部" End If Next Debug.Print shiryo: >>>shiryo: >>>■ 請求書 1部 >>>■ 資料A 1部 >>>■ 資料B 1部 |
この事例では、shiryoは上記のような文字列になります。
プログラム6|{資料}とshiryoをエクセルに出力
1 2 |
ws1.Range("B20").Value = "{資料}" ws1.Range("C20").Value = shiryo |
セルB20とC20に「{資料}」、「shiryo」を出力します。
ここで出力する理由は、プログラム7で取得する配列に「{資料}」、「shiryo」を含めるためです。
この処理を加えることで、後半のプログラムが簡単になります。
プログラム7|必要情報を取得
1 2 |
Dim mydata As Variant mydata = ws1.Range("B16:C20").Value |
セル範囲(B16:C20)をmydataとして取得します。
mydataは二次元配列となります。
mydataに格納されているデータを確認してみます。
Debug.Printでチェック
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Dim mydata As Variant mydata = ws1.Range("B16:C20").Value Dim i As Long For i = LBound(mydata) To UBound(mydata) Debug.Print "i:" & i, "mydata(i,1):" & mydata(i, 1), "mydata(i,2):" & mydata(i, 2) Next >>>i:1 mydata(i,1):{取引先企業名} mydata(i,2):株式会社ABC-XYZ >>>i:2 mydata(i,1):{取引先担当者} mydata(i,2):田中 >>>i:3 mydata(i,1):{日付} mydata(i,2):2021/05/27 >>>i:4 mydata(i,1):{備考} mydata(i,2):ご不明点がございましたら、担当までお問い合わせください。 >>>i:5 mydata(i,1):{資料} mydata(i,2): >>> ■ 請求書 1部 >>> ■ 資料A 1部 >>> ■ 資料B 1部 |
上記のとおり、B16:C20を二次元配列として取得することができました。
プログラム8|プログラム6で出力したデータをエクセルから削除
1 |
ws1.Range("B20:C20").ClearContents |
セルB20とC20は不要なので、削除します。
プログラム7でmydataの中に既に情報は格納されているからです。
そのため不要なデータは削除しておきます。
プログラム9|ワード起動
1 2 3 |
Dim wdapp As Word.Application Set wdapp = CreateObject("Word.application") wdapp.Visible = True |
ワードアプリケーションを起動します。
「wdapp.Visible = True」でワードをPC上に見える形で起動します。
プログラム10|テンプレートワードのパス取得
1 2 |
Dim path As String path = ThisWorkbook.path & "\00_資料送付状テンプレート.docx" |
テンプレートのワードファイルのフルパスをpathで取得します。
なおテンプレートワードファイルはエクセルと同じフォルダに保管してある必要があります。
pathをDebug.Printでチェックしてみます。
1 2 3 4 5 |
Dim path As String path = ThisWorkbook.path & "\00_資料送付状テンプレート.docx" Debug.Print "path:" & path >>>path:D:\(省略)\VBA\00_資料送付状テンプレート.docx |
上記のとおりテンプレートのWordファイルのpathを取得できました。
プログラム11|テンプレートワードを開く
1 2 3 4 5 |
Dim wddoc As Word.Document Set wddoc = wdapp.Documents.Open(path) Dim waittime As Variant waittime = Now + TimeValue("0:00:03") Application.Wait waittime |
プログラム10で設定したテンプレートワードを開きます。
このときwaittimeでワードを起動するまで3秒待つようにしています。
3秒待つ理由は、ワードファイルを開く前にワードに対する処理が行われないようにするためです。
実はワードファイルを開くときに時間がかかる場合があり、ワードファイルを開く前に処理が行われると予期しない結果になってしまうリスクがあるのです。
よって3秒待つことで、正しく処理が実行されるようにします。
プログラム12|テンプレートワードにmydataの情報を挿入
1 2 3 4 5 6 7 8 |
Dim i As Long For i = LBound(mydata) To UBound(mydata) With wddoc.Content.Find .Text = mydata(i, 1) .Replacement.Text = mydata(i, 2) .Execute Replace:=wdReplaceAll End With Next |
以下のとおり、テンプレートの文言を置換します。
1. {取引先企業名} → 株式会社ABC-XYZ
2. {取引先担当者} → 田中
3. {日付} → 2021/5/27
4. {備考} → ご不明点がございましたら、担当までお問い合わせください。
5. {資料} → ■ 請求書 1部 (改行) ■ 資料A 1部 (改行) ■ 資料B 1部
ワードの内の文言を置換
1 2 3 4 5 |
With wddoc.Content.Find .Text = 置換前の文言 .Replacement.Text = 置換後の文言 .Execute Replace:=wdReplaceAll End With |
上記のプログラムで、文言を置換することが可能です。
プログラム13|送付状のワードファイルを新しいファイルで保存
1 2 3 4 |
Dim filename As String, filepath As String filename = Format(mydata(3, 2), "yyyy-mm-dd") & "_" & mydata(1, 2) & ".docx" filepath = ThisWorkbook.path & "\00_資料送付状\" & filename wddoc.SaveAs2 filepath |
資料送付状の情報を入れこんだワードファイルを新しいファイル名で保存します。
新しいワードファイルの名前はfilename、保存先のフォルダパスはfilepathとして設定します。
「00_資料送付状」というフォルダの直下に、新しいワードファイルとして保存します。
Debug.Printでチェック
filenameとfilepathをDebug.Printでチェックしてみます。
1 2 3 4 5 6 7 8 9 |
Dim filename As String, filepath As String filename = Format(mydata(3, 2), "yyyy-mm-dd") & "_" & mydata(1, 2) & ".docx" filepath = ThisWorkbook.path & "\00_資料送付状\" & filename wddoc.SaveAs2 filepath Debug.Print "filename:" & filename Debug.Print "filepath:" & filepath >>>filename:2021-05-27_株式会社ABC-XYZ.docx >>>filepath:D:\(省略)\VBA\00_資料送付状\2021-05-27_株式会社ABC-XYZ.docx |
プログラム14|ワードファイルを最前面に出す
1 2 |
wdapp.WindowState = wdWindowStateMinimize wdapp.WindowState = wdWindowStateNormal |
Wordファイルを最前面に表示します。
そうすることで、マクロ実行後にスムーズにWord操作をできるようにしています。
Wordファイルを最前面に表示するプログラム
プログラムは以下を実行しています。
1 2 3 4 5 |
'Wordファイルを最小化 wdapp.WindowState = wdWindowStateMinimize 'Wordファイルを通常サイズで表示 wdapp.WindowState = wdWindowStateNormal |
上記のように最小化して通常サイズで表示することで、強制的にWordファイルを最前面に表示するようにしています。
プログラム15|データを差し込んだワードを印刷
1 |
wddoc.PrintOut |
印刷を行います。
上記の画像は印刷のプレビュー画面ですが、「wddoc.PrintOut」でワードファイルのデータを印刷することができます。
印刷が不要な場合は以下のようにコメントアウトすることで、印刷をスキップできます。
1 |
'wddoc.PrintOut |
なおPrintOutだけだと、初期設定のまま印刷されます。
そのため横にしたり、サイズを変更したりして印刷条件を変更したい場合は、コメントアウトしておくことをお勧めします。
Wordファイルはプログラム14で最前面に表示しているので、マクロ実行後、印刷条件を確認して手動で印刷すれば問題ないはずです。
プログラム16|オブジェクト解放
1 2 |
Set wddoc = Nothing Set wdapp = Nothing |
ワードのオブジェクト解放を行います。
プログラム17|プログラム終了
1 |
End Sub |
プログラム1と対になるプログラムで、プログラム終了させるための記述です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムの解説はここまでです。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
成長の過程は以下で紹介しています。
学習の過程では、意識すべきポイントがあります。
特に独学の場合だと、勉強を優先してしまい、肝心な実践を疎かにしがちです。
私の経験では、実践から逆算した勉強が必要だと考えています。
目指すべきは会社でお金をもらいながら勉強することです。
要はVBAを仕事の一つとして上司に認めてもらうのです。
そうすればわざわざ高いお金を払って勉強をする必要がなくなります。
しかも作業を自動化して、会社やチームに貢献しつつ、自らのスキルアップできます。
そのために必要な考え方を以下で紹介しています。
とはいえ、プログラミング初心者でVBAについて知識ゼロの人もいるはずです。
いきなり会社でVBAで使うことさえ、とてつもなくハードルが高く見えてしまうものです。
その場合は、VBAの基本について学ぶ必要があります。
たとえば車の運転も慣れてしまえば、たいしたことではありません。
しかし教習所で運転の基本を学び、免許を取得することで、公道で運転できるようになります。
VBAも同じです。VBAに免許はありませんが、まずは基本を学ばないことには会社で使えるレベルにはなりません。
実際に私もプログラミング初心者のときは、動画を見たり書籍を読んだりして勉強しました。
今はオンラインの教材で無料で学習できるものも多いです。
上記のリンクでは、私の経験から勉強にオススメの教材を紹介しています。
興味がある人はご覧ください。
VBAを自分で書けるようになる
さて、本記事で紹介したマクロを利用すれば、作業の自動化が可能になります。
しかしデメリットもあります。それはカスタムできないことです。
なぜなら、色々な要望が増えるからです。
この動画を見たとき、「もっと○○ができるのでは?」や「ここはなんとかならないのか」と感じる人は少なくないはずです。
例えば、「他の条件を付け加えたい」や「日付毎に条件を変えたい」といった要望が出るかもしれません。
このような要望を満たすには、マクロを勉強して自力でマクロを編集できるようになる必要があります。
もし、自力でマクロを編集できるようになれば、今より仕事の効率はグッと上がります。
実際、私も自力でマクロを書けるようになってからは、仕事の生産性が一気に上がりました。
他の人が30分~1時間かけて行う仕事が、ボタン一つで終わらせることができるようになったのです。
その結果、周囲からの信頼も増し、仕事で高い評価を得られるようになりました。
ただ、要望に応えるようになるためには、マクロを学ぶ必要があります。
まずは無料でマクロを勉強してみる
ウェブや書籍で勉強すれば、マクロを習得できると考えている人は少なくありません。
しかし、仕事で使えるマクロを習得したいなら、仕事で使える部分に特化した教材で学ぶことをお勧めします。
なぜなら、ウェブや書籍には仕事に関係しない部分まで提供していることが多いからです。
例えば、マクロ初心者なのに配列を学ぼうとする人がいます。実は配列なしでも仕事で使えるマクロを書くことは可能です。
しかし、マクロ初心者ほど「全ての知識が必要だ」と考えて、無駄な学習に時間を使ってしまうのです。詳しくは、こちらの記事で紹介しています。
そこで、私がお勧めするのは仕事に直結するマクロ教材です。とくにお勧めするのは、こちらの無料オンライン動画です。
なぜなら、仕事に直結する部分に絞って、エクセルマクロを学ぶことができるからです。
マクロの作り方・考え方から解説しているので、教材をしっかり学べばここで紹介したマクロをゼロから書けるようになります。
マクロ初心者が、仕事に直結したいマクロを学ぶなら、まずはこちらの無料オンライン動画を試すのがいいです。
興味がある人は、まずは無料でエクセルマクロの勉強を始めてみてください。
もっと学びたいと感じたら、さらに深く勉強をしてみることをお勧めします。