結論:VBAの基本文法は「①Sub〜End Sub ②代入 ③オブジェクトに命令 ④If文 ⑤For文」の5つに絞って覚えれば十分です。長文マクロは、この5つを組み合わせて「日本語の手順書」をそのままコードにしていけば書けます。
- ターゲット:そもそもVBAの基本的な文法がわからない人
- 悩み
・VBAの基本的な文法がわからない
・VBAを長文で書く方法がわからない
この記事では、最小限の文法だけに絞って、実務で使える長文マクロを書くところまでを解説します。
1.VBAは「日本語の手順書」をそのまま書くだけ
まず考え方から整理します。
- VBAは「Excelにやってほしい作業の手順書」
- 人がやっていることを「①〜②〜③〜…」と並べて、それをVBAの文法で書き直しているだけ
ここでやりがちなのが、
- 文法を全部覚えてから書こうとする
- いきなり複雑なマクロを書こうとする
これは非効率です。
この記事では、
- よく使う文法5つだけ覚える
- その5つを組み合わせて、長文マクロを書けるようにする
という順番で進めます。
2.VBAの基本文法はこの5つだけでいい
最初の段階で覚える文法は次の5つに絞ります。
Sub ~ End Sub:マクロのかたまり- 代入文:変数やセルに値を入れる文
- オブジェクトに命令:
WorksheetsやRangeへの指示 If ~ Then ~ End If:条件分岐For ~ Next:繰り返し
順番に見ていきます。
2-1. マクロの基本形:Sub ~ End Sub
Sub Sample()
' ここにやりたい処理を書く
End Sub
ポイント:
Sub マクロ名()〜End Subの間が1つのマクロ'から右側はコメント(説明文)で、処理には影響しない
2-2. 代入文:値を入れる・覚えておく
Sub SampleAssign()
Dim x As Long ' 整数型の変数xを用意
x = 10 ' 変数xに10を入れる
Range("A1").Value = x ' A1セルにx(10)を入れる
End Sub
最低限押さえるポイント:
Dim 変数名 As 型… 変数(データの箱)を宣言=は「右辺の結果を左辺に代入する」
2-3. オブジェクトに命令:Excelに指示を出す
VBAの典型パターンはこれです。
オブジェクト.プロパティ = 値
オブジェクト.メソッド 引数
例:
Sub SampleRange()
Worksheets("Sheet1").Range("A1").Value = "こんにちは"
Worksheets("Sheet1").Range("A1").Font.Bold = True
End Sub
Worksheets("Sheet1")… シート.Range("A1")… セル.Valueや.Font.Bold… 性質(プロパティ)=で値を設定
セル操作の多くは、この形で書けます。
2-4. If文:条件で処理を分ける
Sub SampleIf()
Dim x As Long
x = Range("A1").Value
If x >= 10 Then
Range("B1").Value = "10以上"
Else
Range("B1").Value = "10未満"
End If
End Sub
型はこれだけ覚えればOKです。
If 条件式 Then
' 条件が真のときの処理
Else
' それ以外のときの処理
End If
2-5. For文:同じ処理を繰り返す
Sub SampleFor()
Dim i As Long
For i = 1 To 10
Range("A" & i).Value = i
Next i
End Sub
For i = 1 To 10
→ i が 1,2,3,…,10 と変わりながら中の処理を繰り返すRange("A" & i)
→A1,A2, …A10を順番に指している
これで「縦にズラッと処理する」が書けるようになります。
3.VBAを「長文」で書くときの考え方
「長文マクロが書けない」と感じる原因はだいたい次の3つです。
- いきなり全部をコードで書こうとする
- 頭の中にあるだけで、手順を日本語に分解していない
- 1つのSubの中に全部を詰め込んで、構造がぐちゃぐちゃになる
ここからは、長いマクロを論理的に組み立てる方法をステップで説明します。
4. 長文マクロを書く4ステップ
ステップ1:やりたい作業を日本語で箇条書きにする
例:「売上データからレポートを作るマクロ」
【このマクロでやること】
1. 元データシート「Data」を準備する
2. 1行目のタイトル行を確認する
3. 2行目以降のデータを最終行まで読み込む
4. 日付ごとに売上を集計する
5. 結果を「Report」シートに書き出す
6. 見出しの太字や罫線を整える
ここではコードは一切書かないでOKです。
まずは「日本語だけ」で手順を固めます。
ステップ2:日本語の1行を、VBAの1ブロックに対応させる
さきほどの①〜⑥を、そのままコメントにします。
Sub 売上レポート作成()
' 1. 元データシート「Data」を準備する
Dim wsData As Worksheet
Set wsData = Worksheets("Data")
' 2. 1行目のタイトル行を確認する
' → 必要ならタイトルチェックをあとで書く
' 3. 2行目以降のデータを最終行まで読み込む
' → For文でループ処理を書く予定
' 4. 日付ごとに売上を集計する
' → 変数や配列を使って集計ロジックを書く
' 5. 結果を「Report」シートに書き出す
' → Rangeに代入する処理を書く
' 6. 見出しの太字や罫線を整える
' → 書式設定の処理を書く
End Sub
この時点で、中身は空でもいいです。
大事なのは、「何をするマクロか」が一目でわかる骨組みを先に作ることです。
ステップ3:長くなりそうな部分はSubに分割する
1つのSubに全部書くと、読めない・直せない・デバッグしづらいマクロになります。
実務では、次のように分割した方が管理しやすいです。
Sub 売上レポート作成()
Call 初期設定
Call 元データ読み込み
Call 売上集計処理
Call レポート出力
Call レイアウト調整
End Sub
Private Sub 初期設定()
' 画面更新停止や共通設定など
End Sub
Private Sub 元データ読み込み()
' Dataシートから必要情報を読み込む
End Sub
Private Sub 売上集計処理()
' For文・If文で集計ロジックを書く
End Sub
Private Sub レポート出力()
' Reportシートに集計結果を書き込む
End Sub
Private Sub レイアウト調整()
' 太字、罫線、自動列幅など見た目の調整
End Sub
考え方はシンプルです。
- メインSub:「手順の一覧」だけを書く
- 各Sub:「具体的な作業」を書く
こうしておけば、後から読む人も「全体像→詳細」の順に追えます。
ステップ4:1ブロックずつ実装して動作確認する
書く手順はこの流れです。
- メインSubと、空のSub(部品)だけ作る
- いちばん上のSub(例:
初期設定)だけ中身を書く - 実行して動作確認
- 問題なければ次のSub(
元データ読み込み)を書く - これを繰り返す
ポイントは、
- いきなり全部完成させようとしない
- 小さく書いて、小さくテストを繰り返す
これでバグの原因がどこか、すぐに特定できます。
5. VBA長文マクロの具体例(シンプル版)
ここからは、実際の「ちょっと長めのマクロ」を1本見てイメージを固めます。
やりたいこと
DataシートのA列にある商品名を読み込むReportシートのA列にコピーする- 見出しを太字にして、列幅を自動調整する
全体のコード
Sub 商品一覧レポート()
Call 初期設定
Call 商品データコピー
Call レポート整形
End Sub
Private Sub 初期設定()
' 画面更新を止めて処理を軽くする
Application.ScreenUpdating = False
End Sub
Private Sub 商品データコピー()
Dim wsData As Worksheet
Dim wsReport As Worksheet
Dim lastRow As Long
Set wsData = Worksheets("Data")
Set wsReport = Worksheets("Report")
' 元データの最終行を取得
lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
' 見出し
wsReport.Range("A1").Value = "商品名"
' 2行目以降をまとめてコピー
wsReport.Range("A2").Resize(lastRow - 1).Value = _
wsData.Range("A2").Resize(lastRow - 1).Value
End Sub
Private Sub レポート整形()
With Worksheets("Report")
' 見出しを太字
.Range("A1").Font.Bold = True
' 列幅を自動調整
.Columns("A").AutoFit
End With
' 画面更新を再開
Application.ScreenUpdating = True
End Sub
ここで使っている文法は、
Sub ~ End Sub- 代入(
=) - オブジェクトへの命令(
Worksheets~Range~.Value/.Font.Bold/.Columns().AutoFit) With ~ End With(おまけの省略記法)
くらいです。
それでも、複数の手順をまとめた「長文マクロ」になっているのがわかると思います。
6. まとめ:最小の文法で、実務レベルの長文マクロへ
最後に整理します。
- VBAの基本文法は5つに絞る
Sub ~ End Sub- 代入文(
=) - オブジェクトへの命令(
Worksheets/Range/.Valueなど) If ~ Then ~ End IfFor ~ Next
- 長文マクロは「日本語の手順書」から作る
- まず日本語で「1.〜 2.〜 3.〜」と箇条書き
- それをコメントとしてコードに貼り、下に処理を書いていく
- 長くなったらSubを分割する
- メインSubは「何をするか」だけ
- 詳細は
Private Subに切り出す
- 1ブロックずつ実装・テストを繰り返す
- 完成形をいきなり書かない
- 小さい単位で動かしながら積み上げる
この流れを守れば、
- 文法の暗記地獄にハマらず
- 実務で使えるレベルの「長文マクロ」を組めるようになります。
VBAは「全部知ってから書くもの」ではなく、最低限の文法+日本語の手順書で十分戦える言語です。

コメント