VBA超入門:基本文法5つだけ覚えて長文マクロを書けるようになるまで

結論:VBAの基本文法は「①Sub〜End Sub ②代入 ③オブジェクトに命令 ④If文 ⑤For文」の5つに絞って覚えれば十分です。長文マクロは、この5つを組み合わせて「日本語の手順書」をそのままコードにしていけば書けます。

  • ターゲット:そもそもVBAの基本的な文法がわからない人
  • 悩み
    ・VBAの基本的な文法がわからない
    ・VBAを長文で書く方法がわからない

この記事では、最小限の文法だけに絞って、実務で使える長文マクロを書くところまでを解説します。


1.VBAは「日本語の手順書」をそのまま書くだけ

まず考え方から整理します。

  • VBAは「Excelにやってほしい作業の手順書」
  • 人がやっていることを「①〜②〜③〜…」と並べて、それをVBAの文法で書き直しているだけ

ここでやりがちなのが、

  • 文法を全部覚えてから書こうとする
  • いきなり複雑なマクロを書こうとする

これは非効率です。

この記事では、

  • よく使う文法5つだけ覚える
  • その5つを組み合わせて、長文マクロを書けるようにする

という順番で進めます。


2.VBAの基本文法はこの5つだけでいい

最初の段階で覚える文法は次の5つに絞ります。

  1. Sub ~ End Sub:マクロのかたまり
  2. 代入文:変数やセルに値を入れる文
  3. オブジェクトに命令:WorksheetsRange への指示
  4. If ~ Then ~ End If:条件分岐
  5. 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ブロックずつ実装して動作確認する

書く手順はこの流れです。

  1. メインSubと、空のSub(部品)だけ作る
  2. いちばん上のSub(例:初期設定)だけ中身を書く
  3. 実行して動作確認
  4. 問題なければ次のSub(元データ読み込み)を書く
  5. これを繰り返す

ポイントは、

  • いきなり全部完成させようとしない
  • 小さく書いて、小さくテストを繰り返す

これでバグの原因がどこか、すぐに特定できます。


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. まとめ:最小の文法で、実務レベルの長文マクロへ

最後に整理します。

  1. VBAの基本文法は5つに絞る
    • Sub ~ End Sub
    • 代入文(=
    • オブジェクトへの命令(Worksheets / Range / .Valueなど)
    • If ~ Then ~ End If
    • For ~ Next
  2. 長文マクロは「日本語の手順書」から作る
    • まず日本語で「1.〜 2.〜 3.〜」と箇条書き
    • それをコメントとしてコードに貼り、下に処理を書いていく
  3. 長くなったらSubを分割する
    • メインSubは「何をするか」だけ
    • 詳細はPrivate Subに切り出す
  4. 1ブロックずつ実装・テストを繰り返す
    • 完成形をいきなり書かない
    • 小さい単位で動かしながら積み上げる

この流れを守れば、

  • 文法の暗記地獄にハマらず
  • 実務で使えるレベルの「長文マクロ」を組めるようになります。

VBAは「全部知ってから書くもの」ではなく、最低限の文法+日本語の手順書で十分戦える言語です。

コメント

タイトルとURLをコピーしました