顧客に定期的にメール配信をしたいときがあります。
このような作業は、外部のメルマガスタンドを購入して対応する人も多いはずです。
しかしお金をかけずともVBAを使ってExcel×Outlook×Textでツールをつなぎ合わせることで自作することが可能です。
このページでは、VBAでメール定期通知システム(メルマガ配信スタンド)を作ってみます。
・VBAプログラム入りのエクセルをダウンロード可能
それでは以下で詳しく紹介していきます。
目次
VBAでメール定期通知システムを作成
このページでは、上記のようにExcelに入力されたメールアドレスと事前に作成しておいたテキストファイルの情報からメール表をOutlookに貼り付けて送信するVBAプログラム」を紹介します。
できるだけ実務に近い事例として、毎週エクセルで集計したデータをチームメンバーへメール通知する作業を題材にします。
具体的には以下の作業を効率化していきます。
手順1. エクセル一覧を入力
手順2. テキストファイルと添付ファイルを保管
手順3. 配信停止メールアドレスの更新
手順4. 事前確認用アドレスに送信
手順5. 顧客へ一斉通知
以下で使い方の手順を紹介します。
手順1. エクセル一覧を入力
「メールリスト」シートに以下の情報を入力します。
・ユーザーID
・名前
・メールアドレス
上記の4つを入力します。
ただし、NoとユーザーIDはなくてもプログラムは動きます。
C列:名前
名前は手順2で設定するテキストファイル(メール本文)の「{名前}」を差し替えます。
D列:メールアドレス
メール宛先を入力します。顧客へ通知したいメールアドレスを入力しておきます。
メールアドレスが間違っていたり空欄だったりすると、メールを送信できません。
手順2. テキストファイルと添付ファイルを保管
手順2-2. 「20_添付ファイル」にメールに添付するファイルを保管
手順2-3. VBAプログラムを実行して、エクセルにリストアップ
手順2-1. 「10_メール本文」にメール本文となるテキストファイルを保管
「10_メール本文」にメール本文となるテキストファイルを保管します。
このテキストファイルには以下のようにメールの本文を入力しておきます。
テキストファイル内の「{名前}」という記載は、手順1のC列の名前に置換されます。
そのため、名前を置換したい場合は、{名前}と入力しておきます。
手順2-2. 「20_添付ファイル」にメールに添付するファイルを保管
「20_添付ファイル」にメールに添付するファイルを保管します。
この添付ファイルは、PDF,画像(jpeg,png),エクセルなどメール添付できるファイルであればなんでも構いません。
手順2-3. VBAプログラムを実行して、エクセルにリストアップ
VBAプログラムを実行して、手順2-1と手順2-2で保管したファイルをエクセルにリストアップします。
さらにリストアップした内容をもとに、以下のように「メールリスト」のE列とF列にプルダウンリストを自動生成します。
手順3. 配信停止メールアドレスの更新
手順3-2. VBAプログラムを実行して、「メールリスト」シートに出力
手順3-1. 「配信停止」シートのA列にメールを通知しないアドレスを入力
「配信停止」シートのA列にメールを通知しないアドレスを入力します。
手順3-2. VBAプログラムを実行して、「メールリスト」シートに出力
手順3-1で入力した配信停止したいメールアドレスに対して、G列に「停止」を出力します。そして行ごとグレーアウトします。
手順4. 事前確認用アドレスに送信
手順4-2. VBAプログラムを実行して、事前確認用アドレスにメール送信
手順4-1. 事前確認用アドレスを入力
顧客にメールを一斉通知する前に、誤った内容のものが送信されないことを確認する必要があります。
そこで「送信前チェック」シートに事前確認用の「C列:名前」、「D列:メールアドレス」、「E列:送信メールファイル(本文)」、「F列:添付ファイルURL」を入力します。
手順4-2. VBAプログラムを実行して、事前確認用アドレスにメール送信
VBAプログラムを実行して、事前確認用のメールアドレス宛に正しくメールが作成されていることを確認します。
確認なしで、メールを一斉送信すると、ミスがあったときに大変なので、このように確認するプロセスを設けています。
手順5. 顧客へ一斉通知
手順5-2. VBAプログラムを実行して、一斉通知
手順5-1. E列とF列をプルダウンリストから選択
E列とF列をプルダウンリストから選択して、情報を入力します。
プルダウンリストは手順2を行うと、自動で作成されます。
手順5-2. VBAプログラムを実行して、一斉通知
VBAを実行すると、エクセルに記載された宛先に対してOutlookを通じてメールを自動送信します。
上記の画像ではメールが一つだけですが、複数の宛先に一斉(正確には連続)にメールを送信します。
このとき手順3で停止設定をした宛先にはメールを通知しません。
また、メールを送信した宛先は「ログ」シートに送信情報を出力します。
使い方の説明はここまでです。
ボタンにVBAプログラムを登録する方法
本ページではVBAプログラムをボタンに登録しています。
ボタンにVBAプログラムを登録することで、ボタンを押下しプログラムを実行することができます。
ボタンをVBAプログラムを設定したい場合は、以下で動画も交えて設定方法を紹介しているので、そちらをご覧ください。
それでは、以下でプログラムについて詳細を説明します。
VBA入りのエクセルファイルをダウンロード
以下で紹介しているVBAプログラムをそのまま使いたい人は、以下のフォームからダウンロードできます。
登録したメールアドレスへVBA入りのファイルを送信します。
本プログラムの内容をそのまま使用可能です。ぜひお仕事にお役立てください。
VBA作成前の2つの準備
ExcelでVBAを使うためにはいくつかの準備が必要です。
具体的には以下です。
準備2. Outlookとテキストファイルを使うための事前準備
上記の2つに関して、以下で説明します。
準備1. ExcelでVBAを使うための事前準備
Excelで、以下の2つの準備をします。
2. 開発タブを追加
保存ファイルの拡張子変更、Excelの基本設定変更の2つです。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下の記事で解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
準備2. Outlookを使うための事前準備
Excel VBAでOutlookのメールを操作するためのプログラミングに入る前に、VBAの設定を変更しておく必要があります。
実はVBAのデフォルト設定の場合、メール送信操作はできません。
なぜなら参照設定が変更だからです。参照設定とは機能拡張させることです。
参照設定を変更することで、Outlookでのメール送信が可能になります。
この記事で紹介するプログラムを使えるようにするには、以下の2つの参照設定を変更します。
2.Microsoft Scripting Runtime
「Microsoft Outlook XX.0 Object Library」にチェックを入れることで、Outlook操作の設定ができるようになります。
「Microsoft Outlook XX.0 Object Library」と記載しましたが、「XX.0」は15.0などの数値が入っています。
「Microsoft Outlook XX.0 Object Library」は1種類しかないはずので、それにチェックを入れます。
「Microsoft Scripting Runtime」にチェックを入れることで、添付ファイルを保存するフォルダを作成することができるようになります。
VBAの参照設定の方法
以下、具体的な設定方法を紹介します。
手順2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック
手順3.Microsoft Scripting Runtimeのライブラリにチェックを入れて、OKをクリック
詳細はこちらの画像の通りです。
手順1.VBEを開いて頂いて、「ツール」→「参照設定」
手順2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック
ここでは「Microsoft Outlook 15.0 Object Library」としていますが、「15.0」は16.0などの数値が入っています。
お使いのExcelによっては、15.0以外の数値が入っている場合があります。その場合、一番大きな数値のもの(1つしかないですが)にチェックを入れるようにします。
手順3.Microsoft Scripting Runtimeのライブラリにチェックを入れて、OKをクリック
上記の設定をしていないと、本事例で紹介しているOutlookメール操作の事例は動作しません。必ずチェックを入れるようにします。
それでは、以下でプログラムについて詳細を説明します。
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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 |
'プログラム0|変数強制 Option Explicit 'プログラム1|メール配信前の確認メッセージ Sub CheckBeforSendingMails() Dim rc As VbMsgBoxResult rc = MsgBox("送信前チェックをしてから実行すること" & String(2, vbCrLf) & "・メール配信を実行するなら「はい」を押す。" & String(2, vbCrLf) & "・送信前チェックが未実施なら「いいえ」を押す ", vbYesNo + vbQuestion) If rc = vbYes Then Call SendMails Else MsgBox "実行を中止します", vbCritical End If End Sub 'プログラム2|メール送信プログラム Sub SendMails() 'プログラム3|変数設定 Dim mailaddress As String, ccaddress As String, bccaddress As String '変数設定:To宛先、cc宛先、bcc宛先 Dim subject As String, mailbody As String, credit As String '変数設定:件名、メール本文、クレジット、添付 Dim username As String Dim i As Long, j As Long, k As Long Dim txtfile As String, attachmentfile As String Dim txt As TextStream 'プログラム4|ワークシート設定 Dim ws1 As Worksheet, ws3 As Worksheet, ws5 As Worksheet Set ws1 = ThisWorkbook.Worksheets("メールリスト") Set ws3 = ThisWorkbook.Worksheets("メールファイルと添付ファイル") Set ws5 = ThisWorkbook.Worksheets("ログ") 'プログラム5|メール本文フォルダと添付ファイルフォルダを取得 Dim txtfilefolder As String, attachmentfilefolder As String txtfilefolder = ThisWorkbook.path & "\" & ws3.Range("B1").Value attachmentfilefolder = ThisWorkbook.path & "\" & ws3.Range("B2").Value 'プログラム6|Filesystemobjectの設定 Dim fs As Scripting.FileSystemObject Set fs = New Scripting.FileSystemObject 'プログラム7|各シートの記載情報を取得 Dim myRange1 As Variant, cmax1 As Long cmax1 = ws1.Range("A65536").End(xlUp).Row myRange1 = ws1.Range("A5:G" & cmax1) 'プログラム8|E列(メール本文ファイル)の空欄の場合、プログラムを強制終了 For i = LBound(myRange1) To UBound(myRange1) If myRange1(i, 7) <> "停止" Then If myRange1(i, 5) = "" Then MsgBox "E列に空欄があります" Exit Sub End If End If Next 'プログラム9|Outlookを起動 Dim OutlookObj As outlook.Application 'Outlookで使用するオブジェクト生成 Set OutlookObj = CreateObject("Outlook.Application") Dim myMail As outlook.MailItem 'Outlookで使用するオブジェクト生成 'プログラム10|シート「メールリスト」の情報を取得 For i = LBound(myRange1) To UBound(myRange1) 'プログラム11|G列が「停止」なら送信しない If Not myRange1(i, 7) = "停止" Then 'プログラム12|メール情報の取得 username = myRange1(i, 3) mailaddress = myRange1(i, 4) subject = myRange1(i, 5) 'プログラム13|メール本文の取得 txtfile = txtfilefolder & "\" & myRange1(i, 5) & ".txt" Set txt = fs.OpenTextFile(Filename:=txtfile, IOMode:=ForReading) mailbody = Replace(txt.ReadAll, "{名前}", username) 'プログラム14|添付ファイルを取得 If myRange1(i, 6) <> "" Then attachmentfile = attachmentfilefolder & "\" & myRange1(i, 6) End If 'プログラム15|Outlookメールを作成 Set myMail = OutlookObj.CreateItem(olMailItem) 'プログラム16|メール情報を設定 myMail.BodyFormat = 3 myMail.To = mailaddress myMail.CC = "" '必要に応じて入れる myMail.BCC = "" '必要に応じて入れる myMail.subject = subject myMail.Body = mailbody 'プログラム17|添付ファイルがあればメールに添付 If attachmentfile <> "なし" Then myMail.Attachments.Add (attachmentfile) End If 'プログラム18|メール送信 'myMail.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない) myMail.Send 'ここをコメントアウトすることでメール送信しないことも可能 'プログラム19|「ログ」シートの入力 Dim cmax5 As Long cmax5 = ws5.Range("A65536").End(xlUp).Row For k = LBound(myRange1, 2) To UBound(myRange1, 2) If k = 1 Then ws5.Range("A" & cmax5 + 1).Offset(0, 0).Value = cmax5 Else ws5.Range("A" & cmax5 + 1).Offset(0, k - 1).Value = myRange1(i, k) End If Next ws5.Range("G" & cmax5 + 1).Value = Now 'プログラム20|myMailのオブジェクト解放 Set myMail = Nothing End If Next 'プログラム21|Outlookを閉じる(オブジェクトの解放) Set OutlookObj = Nothing 'プログラム22|プログラム終了 End Sub 'プログラム0|変数強制 Option Explicit 'プログラム1|プログラム開始 Sub SendMailsForCheck() 'プログラム2|変数設定 Dim mailaddress As String, ccaddress As String, bccaddress As String '変数設定:To宛先、cc宛先、bcc宛先 Dim subject As String, mailbody As String, credit As String '変数設定:件名、メール本文、クレジット、添付 Dim username As String Dim i As Long, j As Long, k As Long Dim txtfile As String, attachmentfile As String Dim txt As TextStream 'プログラム3|ワークシート設定 Dim ws2 As Worksheet, ws3 As Worksheet Set ws2 = ThisWorkbook.Worksheets("送信前チェック") Set ws3 = ThisWorkbook.Worksheets("メールファイルと添付ファイル") 'プログラム4|メール本文フォルダと添付ファイルフォルダを取得 Dim txtfilefolder As String, attachmentfilefolder As String txtfilefolder = ThisWorkbook.path & "\" & ws3.Range("B1").Value attachmentfilefolder = ThisWorkbook.path & "\" & ws3.Range("B2").Value 'プログラム5|Filesystemobjectの設定(→テキストファイルの取得に利用) Dim fs As Scripting.FileSystemObject Set fs = New Scripting.FileSystemObject 'プログラム6|各シートの記載情報を取得 Dim myRange2 As Variant, cmax2 As Long cmax2 = ws2.Range("A65536").End(xlUp).Row myRange2 = ws2.Range("A5:F" & cmax2) 'プログラム8|E列(メール本文ファイル)の空欄の場合、プログラムを強制終了 For i = LBound(myRange2) To UBound(myRange2) If myRange2(i, 5) = "" Then MsgBox "E列に空欄があります" Exit Sub End If Next 'プログラム9|Outlookを起動 Dim OutlookObj As outlook.Application 'Outlookで使用するオブジェクト生成 Set OutlookObj = CreateObject("Outlook.Application") Dim myMail As outlook.MailItem 'Outlookで使用するオブジェクト生成 'プログラム10|シート「送信前チェック」の情報を取得 For i = LBound(myRange2) To UBound(myRange2) 'プログラム11|メール情報の取得 username = myRange2(i, 3) mailaddress = myRange2(i, 4) subject = myRange2(i, 5) 'プログラム12|メール本文の取得 txtfile = txtfilefolder & "\" & myRange2(i, 5) & ".txt" Set txt = fs.OpenTextFile(Filename:=txtfile, IOMode:=ForReading) mailbody = Replace(txt.ReadAll, "{名前}", username) 'プログラム13|添付ファイルを取得 If myRange2(i, 6) <> "" Then attachmentfile = attachmentfilefolder & "\" & myRange2(i, 6) End If 'プログラム14|Outlookメールを作成 Set myMail = OutlookObj.CreateItem(olMailItem) 'プログラム15|メール情報を設定 myMail.BodyFormat = 3 myMail.To = mailaddress myMail.CC = "" '必要に応じて入れる myMail.BCC = "" '必要に応じて入れる myMail.subject = subject myMail.Body = mailbody 'プログラム16|添付ファイルがあればメールに添付 If attachmentfile <> "なし" Then myMail.Attachments.Add (attachmentfile) End If 'プログラム17|メール送信 myMail.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない) 'myMail.Send 'ここをコメントアウトすることでメール送信しないことも可能 'プログラム18|myMailのオブジェクト解放 Set myMail = Nothing Next 'プログラム19|Outlookを閉じる(オブジェクトの解放) Set OutlookObj = Nothing 'プログラム20|プログラム終了 End Sub 'プログラム0|変数強制 Option Explicit 'プログラム1-1|プログラム開始 Sub GetFilesNames() 'プログラム1-2|シート設定 Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("メールファイルと添付ファイル") 'プログラム1-3|メール本文フォルダと添付ファイルフォルダを取得 Dim mailbodyfolder As String, attachfilefolder As String mailbodyfolder = ThisWorkbook.path & "\" & ws.Range("B1").Value attachfilefolder = ThisWorkbook.path & "\" & ws.Range("B2").Value 'プログラム1-4|プログラム2-1を呼び出す Call WriteFilesNames(mailbodyfolder, 0, ws) 'プログラム1-5|プログラム2-1を呼び出す Call WriteFilesNames(attachfilefolder, 1, ws) 'プログラム1-6|プログラム3-1を呼び出す Call GetPullDownList End Sub 'プログラム2-1|プログラム開始 Sub WriteFilesNames(path As String, i As Long, ws As Worksheet) 'プログラム2-2|Filesystemobjectの設定 Dim fs As Scripting.FileSystemObject Set fs = New Scripting.FileSystemObject 'プログラム2-3|対象フォルダの設定 Dim BaseFolder As Scripting.Folder Set BaseFolder = fs.GetFolder(path) 'プログラム2-4|対象フォルダ内のファイルをエクセルに出力 Dim MyFiles As Scripting.Files Set MyFiles = BaseFolder.Files Dim MyFile As Scripting.File Dim countrow As Long: countrow = 0 For Each MyFile In MyFiles If i = 0 Then If fs.GetExtensionName(MyFile) = "txt" Then ws.Range("A5").Offset(countrow, i).Value = fs.GetBaseName(MyFile) countrow = countrow + 1 End If ElseIf i = 1 Then ws.Range("A5").Offset(countrow, i).Value = MyFile.Name countrow = countrow + 1 End If Next 'プログラム2-5|オブジェクト解放 Set MyFile = Nothing Set MyFiles = Nothing Set BaseFolder = Nothing Set fs = Nothing 'プログラム2-6|プログラム終了 End Sub 'プログラム3-1|プログラム開始 Sub GetPullDownList() 'プログラム3-2|ワークシート設定 Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, ws4 As Worksheet Set ws1 = ThisWorkbook.Worksheets("メールリスト") Set ws2 = ThisWorkbook.Worksheets("送信前チェック") Set ws3 = ThisWorkbook.Worksheets("メールファイルと添付ファイル") 'プログラム3-3|「メールファイルと添付ファイル」シートのA列とB列の最終行を取得 Dim list_mailfile() As Variant, list_attachedfile() As Variant Dim cmax2_1 As Long, cmax2_2 As Long cmax2_1 = ws3.Range("A65536").End(xlUp).Row cmax2_2 = ws3.Range("B65536").End(xlUp).Row 'プログラム3-4|「メールファイルと添付ファイル」シートのA列とB列を配列として取得 If cmax2_1 > 4 Then list_mailfile = WorksheetFunction.Transpose(ws3.Range("A5:A" & cmax2_1).Value) Else MsgBox "メールファイルのフォルダにテキストファイルを保管してください" Exit Sub End If If cmax2_2 > 4 Then list_attachedfile = WorksheetFunction.Transpose(ws3.Range("B5:B" & cmax2_2).Value) Else MsgBox "添付ファイルのフォルダにテキストファイルを保管してください" Exit Sub End If 'プログラム3-5|「メールリスト」シートのA列の最終行を取得 Dim cmax1 As Long cmax1 = ws1.Range("A65536").End(xlUp).Row 'プログラム3-6|「メールリスト」シートのE列にプルダウンリストを作成 With ws1.Range("E5:E" & cmax1).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Join(list_mailfile, ",") End With 'プログラム3-7|「メールリスト」シートのF列にプルダウンリストを作成 With ws1.Range("F5:F" & cmax1).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Join(list_attachedfile, ",") End With 'プログラム3-8|「送信前チェック」シートのE5にプルダウンリストを作成 With ws2.Range("E5").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Join(list_mailfile, ",") End With 'プログラム3-9|「送信前チェック」シートのF5にプルダウンリストを作成 With ws2.Range("F5").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Join(list_attachedfile, ",") End With End Sub Option Explicit 'プログラム1|プログラム開始 Sub GetNotSendList() 'プログラム2|ワークシート設定 Dim ws1 As Worksheet, ws4 As Worksheet Set ws1 = ThisWorkbook.Worksheets("メールリスト") Set ws4 = ThisWorkbook.Worksheets("配信停止") 'プログラム3|各シートの最終行を取得 Dim stop_maillist() As Variant Dim cmax1 As Long, cmax4 As Long cmax1 = ws1.Range("A65536").End(xlUp).Row cmax4 = ws4.Range("A65536").End(xlUp).Row 'プログラム4|「配信停止」シートのメールアドレスを取得(なければメッセージ表示してプログラム終了) If cmax4 > 1 Then stop_maillist = WorksheetFunction.Transpose(ws4.Range("A2:A" & cmax4).Value) Else MsgBox "配信停止のメールアドレスはありません" Exit Sub End If 'プログラム5|配信停止のアドレスがあれば、「メールリスト」シートのG列に「停止」を出力 Dim i As Long, j As Long For i = 5 To cmax1 For j = LBound(stop_maillist) To UBound(stop_maillist) If ws1.Range("D" & i).Value = stop_maillist(j) Then ws1.Range("G" & i).Value = "停止" ws1.Range("A" & i & ":G" & i).Interior.ColorIndex = 15 End If Next Next 'プログラム6|プログラム終了 End Sub |
このページではプログラムの詳しい解説は省略します。
プログラムにコメントアウトでメモを残していますので、そちらを見ながら必要な箇所を編集してご活用ください。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
成長の過程は以下で紹介しています。
学習の過程では、意識すべきポイントがあります。
特に独学の場合だと、勉強を優先してしまい、肝心な実践を疎かにしがちです。
私の経験では、実践から逆算した勉強が必要だと考えています。
目指すべきは会社でお金をもらいながら勉強することです。
要はVBAを仕事の一つとして上司に認めてもらうのです。
そうすればわざわざ高いお金を払って勉強をする必要がなくなります。
しかも作業を自動化して、会社やチームに貢献しつつ、自らのスキルアップできます。
そのために必要な考え方を以下で紹介しています。
とはいえ、プログラミング初心者でVBAについて知識ゼロの人もいるはずです。
いきなり会社でVBAで使うことさえ、とてつもなくハードルが高く見えてしまうものです。
その場合は、VBAの基本について学ぶ必要があります。
たとえば車の運転も慣れてしまえば、たいしたことではありません。
しかし教習所で運転の基本を学び、免許を取得することで、公道で運転できるようになります。
VBAも同じです。VBAに免許はありませんが、まずは基本を学ばないことには会社で使えるレベルにはなりません。
実際に私もプログラミング初心者のときは、動画を見たり書籍を読んだりして勉強しました。
今はオンラインの教材で無料で学習できるものも多いです。
上記のリンクでは、私の経験から勉強にオススメの教材を紹介しています。
興味がある人はご覧ください。
VBAを自分で書けるようになる
さて、本記事で紹介したマクロを利用すれば、作業の自動化が可能になります。
しかしデメリットもあります。それはカスタムできないことです。
なぜなら、色々な要望が増えるからです。
この動画を見たとき、「もっと○○ができるのでは?」や「ここはなんとかならないのか」と感じる人は少なくないはずです。
例えば、「他の条件を付け加えたい」や「日付毎に条件を変えたい」といった要望が出るかもしれません。
このような要望を満たすには、マクロを勉強して自力でマクロを編集できるようになる必要があります。
もし、自力でマクロを編集できるようになれば、今より仕事の効率はグッと上がります。
実際、私も自力でマクロを書けるようになってからは、仕事の生産性が一気に上がりました。
他の人が30分~1時間かけて行う仕事が、ボタン一つで終わらせることができるようになったのです。
その結果、周囲からの信頼も増し、仕事で高い評価を得られるようになりました。
ただ、要望に応えるようになるためには、マクロを学ぶ必要があります。
まずは無料でマクロを勉強してみる
ウェブや書籍で勉強すれば、マクロを習得できると考えている人は少なくありません。
しかし、仕事で使えるマクロを習得したいなら、仕事で使える部分に特化した教材で学ぶことをお勧めします。
なぜなら、ウェブや書籍には仕事に関係しない部分まで提供していることが多いからです。
例えば、マクロ初心者なのに配列を学ぼうとする人がいます。実は配列なしでも仕事で使えるマクロを書くことは可能です。
しかし、マクロ初心者ほど「全ての知識が必要だ」と考えて、無駄な学習に時間を使ってしまうのです。詳しくは、こちらの記事で紹介しています。
そこで、私がお勧めするのは仕事に直結するマクロ教材です。とくにお勧めするのは、こちらの無料オンライン動画です。
なぜなら、仕事に直結する部分に絞って、エクセルマクロを学ぶことができるからです。
マクロの作り方・考え方から解説しているので、教材をしっかり学べばここで紹介したマクロをゼロから書けるようになります。
マクロ初心者が、仕事に直結したいマクロを学ぶなら、まずはこちらの無料オンライン動画を試すのがいいです。
興味がある人は、まずは無料でエクセルマクロの勉強を始めてみてください。
もっと学びたいと感じたら、さらに深く勉強をしてみることをお勧めします。