Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 最初のVBAプロシージャの作成 | VBAとExcelオブジェクトモデルの紹介
ビジネス自動化のためのExcel VBA

最初のVBAプロシージャの作成

メニューを表示するにはスワイプしてください

マクロの記録は語彙を学ぶ手段であり、ゼロからマクロを書くことはプログラマー的な思考の始まり。

Subプロシージャの構造

値を返す(Function)ではなく、何らかの処理を実行する再利用可能なVBAコードのブロックは、Subとして記述:

Sub ProcedureName()
    ' instructions go here
End Sub

Subの内部でカーソルがある状態でF5を押す(または緑色の実行矢印をクリック)と、プロシージャが実行される。コメント(アポストロフィ(')で始まる行)はVBAで完全に無視されるため、なぜそのコードが必要なのかを説明するために積極的に使うと良い。何をしているかはコードを見れば明らかなことが多い。

すぐに役立つフォーマット習慣

  • 各モジュールの最上部にOption Explicitを記述 — すべての変数宣言を強制し、タイプミスによるバグを未然に防止;
  • ループやIfブロック内のコードはタブでインデント — VBEは強制しないが、インデントがないと可読性が著しく低下;
  • 説明的な名前を使用(例:HighEarnerCountxではなく) — 数週間後の自分が助かる。

実例:高収入者のハイライト

手作業で、テーブル内の各従業員を調べ、給与が$55,000を超える人をハイライトするプロシージャを作成。これは、各行ごとに判断(If文)を繰り返す必要があるため、マクロ記録機能では実現できない。

Option Explicit
 
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long
 
    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
 
    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i
 
    MsgBox "Done — high earners are highlighted."
End Sub
各行の詳細解説
expand arrow
  • Dim ws As Worksheet / Dim i As Long — 2つの変数を宣言:wsEmployeesシートへの参照、iは行番号カウント用;
  • Set ws = ThisWorkbook.Worksheets("Employees") — オブジェクトモデルの基本:アクティブなシートに依存せず、シート名を明示的に指定;
  • ws.Cells(ws.Rows.Count, 1).End(xlUp).Row — 列Aの最終使用行を取得する標準的な記述方法。従業員数が何人でも対応;
  • For i = 2 To lastRow ... Next i — データ行ごとに繰り返すループ。2行目から開始し、ヘッダー行をスキップ;
  • If ws.Cells(i, 6).Value > 55000 Then — 判断処理:給与列(6列目)が55000を超える行のみ書式設定;
  • MsgBox — マクロの完了を知らせるシンプルなポップアップ。

このプロシージャを modIntro に入力し、カーソルをその中に置いて F5 を押してください。自分で数値を確認してください — サンプルテーブルで Emma DavisOlivia Brown の2名が$55,000を超えている従業員です。

タスク

  1. HighlightTopEarnersmodIntroに正確に入力し、実行してください。2行が緑色になることを確認します。
  2. このプロシージャを複製して HighlightITDepartment とし、条件を変更して給与ではなく部門(3列目)が "IT" の行をハイライトするようにします。
  3. 各プロシージャの上に、その内容を1文で説明するコメントを追加します — 読者向けのコメントを書く練習です。
  4. ワークブックを再度保存します(拡張子は .xlsm のままなので、通常通り Ctrl+S で問題ありません)。
ヒント
expand arrow
  1. HighlightTopEarners プロシージャ全体(Sub から End Sub まで)を選択し、コピーして modIntro 内でその直下に貼り付けます。
  2. 2つ目のコピーの Sub 行を Sub HighlightITDepartment() にリネームします — モジュール内の各プロシージャには固有の名前が必要です。そうでないと、VBAはどちらを実行するか判断できません。
  3. 変更する条件は If 行です。現在は数値を判定しています:
If ws.Cells(i, 6).Value > 55000 Then

これをテキスト判定 — 3列目(Department)が "IT" であるかどうか — に変更します。Chapter 2 で学んだ通り、テキスト比較には値を引用符で囲み、= ではなく > を使います。 4. ループ内の他の部分(Interior.Color の行やループ構造)はそのままで構いません — 変更するのは判定条件だけです。

コメントの追加

  1. コメント行はアポストロフィ(')で始まり、Sub 行の直上に単独で記述します — プロシージャ内ではありません。
  2. マクロを初めて見る同僚に説明するつもりで書きます。自分用のメモではありません。比較例:
    • あまり有用でない例: ' loops through rows方法の説明。コードを見れば分かる)
    • より有用な例: ' Highlights employees earning over $55,000何を達成するかの説明。コードだけでは分かりにくい)
  3. 2つ目のプロシージャにも同様に、何をハイライトし、なぜなのか(IT部門スタッフなど、業務目的の観点で)を1文で記述します。ループの仕組みではなく、ビジネス上の目的を説明してください。
解答例
expand arrow
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — high earners are highlighted."
End Sub

' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 3).Value = "IT" Then
            ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — IT department is highlighted."
End Sub

両方を modIntro に入力し、まず HighlightTopEarners を実行して正確に2行(Emma Davis:$62,000、Sophia Miller:$59,000)が緑色になることを確認してください(他の3名は$55,000以下です)。次に HighlightITDepartment を実行し、Sophia Miller の行がハイライトされることを確認します。両方が動作したら Ctrl+S で保存してください。

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  6

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  6
some-alt