【VBA学習ロードマップ】独学で年50件案件を受注できた私の学習方法

エクセル作業を自動化したくてVBAに興味を持ったけど、「何から始めればいいかわからない」「参考書を買ったけど途中で挫折した」という経験はありませんか?
VBAは正しい順番で学べば、プログラミング未経験の方でも必ず使いこなせるようになるスキルです。
私自身、もともとはエクセルを使うだけの会社員でした。
独立を考え始めた頃から、インターネットや初心者向けの参考書だけを使ってVBAを猛勉強し、現在は年間50件以上のマクロ開発を副業として受注するまでになりました。
この記事では、私が実際に実践してきたVBA学習の手順を、ロードマップ形式でわかりやすく解説します。
「エクセル作業を自動化したい」「VBAを仕事や副業に活かしたい」という方は、ぜひ最後まで読んでみてください。
VBA学習で多くの人が挫折する本当の理由
VBAを学ぼうとして挫折してしまう人には、ある共通のパターンがあります。
それは目的がないまま、ただ参考書を眺めるだけという学習方法です。
参考書を読むだけでは絶対に仕事で使えるレベルのVBAスキルは身に付きません。
For文、If文、変数の定義、配列の使い方……など、
どれも大事な知識ではあるのですが、実際に使うシーンが想像できないまま読み進めても、ほとんど頭に残らないのが現実です。
私も最初は同じ失敗をしました。
参考書を1冊買って最初から読んでみたものの、半分も読まないうちに「これ、自分の仕事でどう使うんだろう」という疑問が湧いてきて、いつの間にか読むのをやめてしまいました。
VBAが身に付かない最大の原因は、学ぶ「目的」が明確でないことだと私は考えています。
「いつか使えたら便利」という気持ちでは続かない
「なんとなく便利そうだから覚えたい」という動機だけでは、VBAの学習は長続きしません。
VBAは覚えることが多いように見えますが、実は「自動化したい業務が1つあって、そのために必要なコードを調べながら作る」という進め方をするだけで、自然とスキルが積み上がっていきます。
つまり、最初に「何を自動化したいか」というゴールを決めることが、学習を続けるためにもっとも重要なポイントになるということです。
VBAは「使いながら覚える」が最短ルート
英語を覚えるとき、英文法の教科書を全部読んでから話し始める人はほとんどいません。
少しずつ単語や文法を覚えながら、実際に使ってみることで定着させていくのが自然な方法です。
VBAも同じで、基本的なコードを組み合わせながら「小さく動かす→修正する→動いた!」という成功体験を積み重ねていくのが、もっとも効率的な習得方法です。
目的なく参考書を読み続けるより、「自動化したいものを1つ決めて、それを動かすために調べながらコードを書く」という方法のほうが、はるかに早くVBAが使いこなせるようになります。
【VBA学習ロードマップ】最短でスキルを身に付ける6ステップ
ここからが本題です。
私が実際に実践してきたVBA学習の手順を、6つのステップに分けて解説します。
この流れに沿って進めるだけで、プログラミング未経験の方でもVBAを実務に活かせるレベルまで到達できます。
STEP1|自動化したいエクセル業務を1つ決める
VBA学習の出発点は「何を作るか」を決めることです。
難しいものでなくてかまいません。
たとえば「毎月同じフォーマットで作っている報告書を、ボタン1つで作れるようにしたい」「複数のシートに散らばったデータをまとめて一覧表に転記したい」など、自分が日常的にこなし
ているエクセル作業の中から「面倒だな」と感じているものを1つ選ぶだけでOKです。
最初は、「氏名や会社名を自動転記する」「条件によってセルの色を変える」みたいな簡単な目標を経てましょう。
小さな成功体験が、次のステップへの意欲につながっていくのです。
STEP2|必要なVBAコードをネットや参考書で調べる
自動化したい業務が決まったら、それを実現するために必要なVBAの知識を調べます。
最初から全部覚えようとしなくて結構です。
「シートのデータをコピーするVBA」「特定のセルに値を入力するVBA」「ファイルを保存するVBA」など、やりたいことをそのまま検索して、出てきたコードをまず読んでみましょう。
この段階で大切なのは、コードの意味を完全に理解することではなく、「何となくどういう処理をしているか」をつかむことです。
STEP3|基本コードを組み合わせて1つのマクロを作る
調べて集めたコードを組み合わせて、自分がやりたい処理を実現するマクロを組み立てます。
最初はコピー&ペーストでもかまいません。
大切なのは「動かしてみること」です。
たとえば、毎日手作業でこなしているデータ転記作業を自動化したい場合、以下のようなシンプルなコードが出発点になります。
Sub データ転記サンプル()
Dim ws1 As Worksheet 'コピー元シート
Dim ws2 As Worksheet 'コピー先シート
Dim lastRow As Long '最終行を格納する変数
'シートを変数に代入する
Set ws1 = Worksheets("データ入力")
Set ws2 = Worksheets("転記先")
'「データ入力」シートのA列の最終行を取得する
lastRow = ws1.Cells(Rows.Count, 1).End(xlUp).Row
'2行目から最終行までのA列~C列のデータを転記する
ws1.Range("A2:C" & lastRow).Copy Destination:=ws2.Range("A2")
MsgBox "転記が完了しました!"
End Sub
このコードが実行される流れを確認しましょう。
まずSet ws1 = Worksheets(“データ入力")とSet ws2 = Worksheets(“転記先")で、操作対象のシートを変数に代入する。
次にlastRow = ws1.Cells(Rows.Count, 1).End(xlUp).Rowで、「データ入力」シートのA列に入力されているデータの最終行番号を取得。
そしてws1.Range(“A2:C" & lastRow).Copy Destination:=ws2.Range(“A2")で、取得した最終行までのデータをまとめてコピーし、「転記先」シートのA2セルから貼り付ける。
最後にMsgBox “転記が完了しました!"でメッセージを表示する。
という内容です。
たった数行のコードでも、手作業なら何分もかかっていた転記作業が一瞬で完了します。
関連記事「別シートにテキストを自動転記」では、シートを指定するVBA、転記VBAが設定されたエクセルファイルをダウンロードすることができます。
実際にマクロを動かしてどのようにコードが実行されるのかを体感してみてください。
STEP4|デバッグを繰り返してマクロを完成させる
作ったコードが一発で正しく動くことは、ほとんどありません。
エラーメッセージが出たり、思ったとおりに動かなかったりするのは、VBAを学ぶ上では当たり前のことです。
「エラーが出た=失敗」ではなく、「エラーが出た=修正するヒントが出た」と考えましょう。
VBAのデバッグ(修正作業)でよく使う方法を3つ紹介します。
- 「F8キーでステップ実行」・・・コードを1行ずつ実行できるので、どの行でエラーが起きているかをすぐに確認できる
- 「MsgBoxで変数の中身を確認する」・・・MsgBox lastRowのように書けば、処理途中での変数の値をダイアログで確認できる
- エラーメッセージをそのままネット検索する・・・大体の場合、同じエラーに悩んでいた方の解説ページが見つかる
デバッグを繰り返してマクロが正しく動いたとき、プログラミングの面白さをはじめて実感できるはずです。
デバックが苦手と言う方は、関連記事「VBA初心者でもできるデバックの方法」を参考にしてみてください。
STEP5|実際の業務で使ってみる
マクロが完成したら、実際の仕事で使ってみましょう。
自分が毎日こなしていた手作業がボタン1クリックで終わる瞬間、「VBAって本当にすごい」という感動があるはずです。
この体験が、次のマクロを作りたいというモチベーションにつながります。
私が初めて「これは本物だ」と感じたのは、何百枚もの写真を1枚ずつ手作業でエクセルシートに貼り付けていた業務を自動化したときでした。
それまで1時間以上かかっていた作業が、マクロを実行してから数分で終わった瞬間、VBAへの向き合い方が完全に変わりました。
関連記事「写真の貼付けを完全自動化」では、写真を貼り付けるVBAが設定されたエクセルファイルをダウンロードすることができます。
写真を貼り付ける作業に時間を費やしている方は是非参考にしてみてください。
STEP6|使ったVBAを復習して「引き出し」を増やす
マクロが完成して実務で使えるようになったら、そこで使ったVBAを改めて振り返りましょう。
「このコードは何をしているのか」「なぜこの書き方をするのか」を理解することで、次に似た処理を書くときの「引き出し」が増えていきます。
この復習の習慣が、VBAのスキルを着実に積み上げていくために欠かせないステップです。
STEP1から6を繰り返すたびに、扱える業務の範囲が広がり、より複雑なマクロも作れるようになっていきます。
実際にこのロードマップで私が身に付けたVBAスキル
このSTEP1〜6の繰り返しで、私が実際にどんなマクロを開発できるようになったかを紹介します。
最初は写真貼り付けマクロ、最後には契約書自動作成マクロへ
VBAを学び始めた最初の頃に作ったのは、写真をエクセルシートに自動で貼り付けるマクロです。
その後、転記処理、印刷処理、データ集計、シートの自動生成と少しずつ扱える範囲を広げていき、最終的には以下のようなマクロを開発できるようになりました。
契約書を自動作成するマクロ、スケジュール管理を自動化するマクロ、電気設備検査表を自動作成するマクロ、勤務整理を自動化するマクロ。
どれも業務内容に合わせたオーダーメイドのマクロで、依頼者の方の作業時間を大幅に短縮することができました。
最初は「写真の貼り付けを自動化する」というたった1つの目的から始めた学習が、気づけばあらゆる業務を自動化できるスキルに成長していたのです。
「目的があればVBAは伸びる」と実感した話
私の経験で特に印象に残っているのは、「何百枚もの写真を手作業で貼り付けるエクセル業務を自動化したい」という1つのテーマに集中して取り組んだ期間のことです。
写真ファイルのパスを取得するコード、指定したセルに画像を挿入するコード、サイズを調整するコード。
これらを1つずつ調べて組み合わせていくうちに、それまでぼんやりとしか理解できていなかったVBAの書き方が、リアルに「見えてくる」感覚がありました。
目的があるから調べる、調べるから覚える、覚えるから応用できる。
この好循環こそが、VBAを最短で習得するための本質だと、私は今でも確信しています。
文字に〇を付けるVBAも同じ発想で作れる
「有・無」の項目に〇を付ける処理も、最初は手作業でこなしていた方がほとんどでした。
VBAを使えば、〇が必要なセルを条件で判定して、図形の〇を自動配置することができます。
こんな感じ

このVBAは、「有・無」に〇を付ける、「確認・未確認」に〇を付ける、「承認・否認」に〇を付ける、といった書類作成に効果的で、
〇の編集忘れがなくなってストレスが軽減しました!と大好評でした。
関連記事「文字を〇で囲む操作を完全自動化」では、テキストを図形〇で囲むVBAが設定されたエクセルファイルをダウンロードすることができます。
初心者がつまずきやすいVBA学習の壁
VBA学習をスタートさせると誰もがぶち当たる3つの壁があります。
難しいと感じているのはあなただけではありません。
壁を乗り越えられれば、頭の中でイメージする処理をVBAコードでスラスラ書けるようになるので途中で諦めないでください。
ポイント①|変数の宣言(Dim)を最初に理解する
VBAを書き始めてすぐにつまずきやすいのが「変数」の概念です。
変数とは、データを一時的に入れておく「箱」のようなもの。
Dim myName As String '文字列を入れる箱
Dim myCount As Long '整数を入れる箱
myName = "マメ太郎"
myCount = 100
MsgBox myName & "さんのカウントは" & myCount & "です。"
Dim(Dimensionの略)を使って変数を宣言し、入れるデータの種類(型)を指定します。
文字列ならString、整数ならLong、を使うのが基本です。
変数を使うことで、コードの中で同じ値を何度も書かなくて済むようになり、修正が必要なときも1か所だけ直せばよくなります。
ポイント②|For文とIf分の組み合わせが基本の型
VBAで最も多く使うのが、For文(繰り返し処理)とIf文(条件分岐)の組み合わせです。
Sub 条件付き繰り返しサンプル()
Dim i As Long '繰り返しのカウント変数
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
'2行目から20行目まで繰り返す
For i = 2 To 20
'B列の値が「対象」だった場合、C列に「済」と入力する
If ws.Cells(i, 2).Value = "対象" Then
ws.Cells(i, 3).Value = "済"
End If
Next i
MsgBox "処理が完了しました!"
End Sub
このコードは、Sheet1の2行目から20行目までを1行ずつ確認していきます。
For i = 2 To 20で繰り返す範囲を指定し、If ws.Cells(i, 2).Value = “対象" ThenでB列の値が「対象」かどうかを判定。
条件に合った行だけC列に「済」と入力する
という内容です。
このFor+Ifのパターンを理解するだけで、業務で使えるマクロの大半は作れるようになります。
ポイント③|エラーが出ても焦らない。エラーはVBAからのヒント
初心者が最も戸惑うのが、エラーメッセージが出たときです。
「実行時エラー '9’: インデックスが有効範囲にありません」のようなメッセージが突然出ると、何が起きたのかわからなくて焦ってしまいます。
ただ、エラーメッセージはVBAが「ここで問題が起きています」と教えてくれているサインです。
エラーの内容をそのままコピーしてネット検索すれば、ほとんどのケースで解決策が見つかります。
よくあるエラーとその原因をいくつか紹介しておきます。
- 「実行時エラー '9’: インデックスが有効範囲にありません」は、指定したシート名やセル範囲が存在しないときに出るエラー
- 「実行時エラー '1004’: アプリケーション定義またはオブジェクト定義のエラーです」は、操作対象のセルや範囲の指定が間違っているときによく出るエラー
- 「コンパイルエラー:変数が定義されていません」は、Option Explicitをオンにしている状態で変数を宣言せずに使ったときに出るエラー
エラーと向き合い続けることが、VBAのスキルアップに直結します。
VBAの将来性とスキルを収益につなげる考え方
VBAを学ぶことに対して「VBAはもう古い」「将来性がない」という声を聞いたことはありませんか?
結論から言うと、
VBAの需要はまだまだ高く、需要がなくなることはない
です。
その理由は、エクセルを使って業務を管理している会社や個人事業主は日本中にたくさんいて、VBAによる自動化ニーズが現在もなくなっていないから。
実際に私の周りでは、「エクセルで契約書を作成する」「エクセルで勤怠整理している」「エクセルで会計記録している」という方が多く、「自動的に請求書を作成するマクロを作って欲しい」「期日が近づいたら色を変えるマクロを作って欲しい」などいろんな問題を抱えながらルーティーン作業をこなしている方がほとんどです。
私はこのような方々から業務内容に合わせたマクロ開発のお仕事を貰って収入を得ています。
VBAスキルを身に付ければ、今のエクセル業務を自動化できるだけでなく収益化することも可能なんです。
VBAを使って副業や収入につなげる具体的な方法については、関連記事「VBAはオワコン?収入化できた実体験から将来性と今後の稼ぎ方を解説」で詳しく解説しています。
独立前後の実体験をもとに書いた記事なので、「VBAを仕事に活かしたい」と考えている方にぜひ参考にしてみてください。
まとめ ~ VBA学習ロードマップを繰り返すことで、スキルは必ず積み上がる ~
この記事で紹介したVBA学習ロードマップをもう一度整理します。
STEP1は「自動化したいエクセル業務を1つ決める」
STEP2は「必要なVBAコードをネットや参考書で調べる」
STEP3は「基本コードを組み合わせて1つのマクロを作る」
STEP4は「デバッグを繰り返してマクロを完成させる」
STEP5は「実際の業務で使ってみる」
STEP6は「使ったVBAを復習して引き出しを増やす」
目的を決めて、調べて、作って、デバッグして、使って、振り返る。
この6つのステップを1サイクルとして繰り返すことで、VBAのスキルは確実に積み上がっていきます。
参考書を頭から読むだけでは身に付かないVBAも、このロードマップに沿って進めれば必ず使いこなせるようになるはずです。
ぜひ今日から、自動化したい業務を1つ考えるところから始めてみてください。
もし「自分の業務に合わせた複雑なチェック処理を実装したい」「既存のマクロを改良したい」といったご要望がありましたら、マメBlogのエクセルマクロ開発依頼にご相談ください。
業務内容に合わせたオーダーメイドマクロを設定させていただきます。
最後まで読んでいただきありがとうございました。
エクセルVBAを使って面倒なルーティーン作業を自動化しちゃいましょう。






