Excel VBA | Subプロシージャの記述と実行

Excel VBA VBA
スポンサーリンク

初心者向けにやさしく、丁寧に、例題つきで解説します。実際に手を動かしながら学べるように、「何をするか」「どこに書くか」「実行の仕方」「よくある例(サンプルコード)」と「注意点」を順にまとめます。さっそくいきましょう!

Subプロシージャ(マクロ)とは — 超かんたん説明

  • Subプロシージャは「処理のまとまり(命令のグループ)」。Excelに対して「これをやってね」と指示を書く箱です。
  • 書き方(最小形):
Sub サンプル名()
    ' ここに処理を書く
End Sub
VB

VBE(Visual Basic Editor)を開いて書く手順(初心者向け)

  1. Excel を開く。
  2. リボンで「開発」タブが見えない場合:
    • 「ファイル」→「オプション」→「リボンのユーザー設定」→右側で「開発」にチェックを入れて OK。
  3. 「開発」タブ → 「Visual Basic」ボタンをクリックすると VBE(エディタ)が開く。
  4. VBE のメニューで 挿入標準モジュール を選ぶ。左側に Module1 ができる。
  5. そのコードウィンドウに Sub ~ End Sub を書いて保存(Ctrl+S)。

Subの実行方法(いろいろ)

  • VBE上でカーソルを対象のSub内に置いて F5 キー(実行)またはメニュー「実行」→「Sub/ユーザーフォームの実行」。
  • Excel上で「Alt+F8」を押すとマクロ一覧が出る → 実行したいマクロを選んで実行。
  • リボンのボタンやフォームコントロールに割り当てる(「開発」→「挿入」→ボタン)と、クリックで実行可能。
  • 「マクロの記録」機能で自動生成されたSubを確認して編集するのも学習に便利。

基本の命令(よく使うもの)

  • MsgBox "文字列":メッセージを表示(確認ダイアログ)。
  • InputBox("質問"):ユーザー入力を受け取る。
  • Range("A1").Value = 100:セルに値を入れる。
  • Cells(行, 列):行番号・列番号でセルを指定(例:Cells(1,1) は A1)。
  • For / NextIf / Then / End If:ループや条件分岐。
  • ActiveSheetWorksheets("Sheet1"):どのシートを操作するか指定。

例題1:はじめの1歩 — 「こんにちは」と表示するマクロ

目的:MsgBoxで簡単に動作確認。

Sub Hello()
    MsgBox "こんにちは!Excel VBAへようこそ。"
End Sub
VB

説明:実行すると小さなダイアログが出ます。動けばVBA環境が動いています。

例題2:選択中のセルに黄色の背景を付ける(実用的)

目的:シート上でセルを選択してから実行する。

Sub HighlightSelection()
    If TypeName(Selection) <> "Range" Then
        MsgBox "セルを選択してから実行してください。"
        Exit Sub
    End If

    Selection.Interior.Color = vbYellow
End Sub
VB

説明:

  • Selection は今ユーザーが選んでいる範囲。
  • Interior.Color = vbYellow で背景色を黄色にします。
  • TypeName チェックは、図形やグラフを選んでいるときにエラーを避けるための保険です。

例題3:列Aの数字を合計してメッセージで表示(Forループの例)

目的:ループと変数の使い方を学ぶ。

Sub SumColumnA()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim i As Long
    Dim total As Double
    total = 0

    For i = 1 To lastRow
        If IsNumeric(ws.Cells(i, "A").Value) Then
            total = total + ws.Cells(i, "A").Value
        End If
    Next i

    MsgBox "列Aの合計は " & total & " です。"
End Sub
VB

ポイント:

  • lastRow の取り方:列の最終入力行を自動で見つける定石です。
  • IsNumeric で数値以外を弾く安全対策。
  • Dim で変数宣言し、Set はオブジェクト変数に代入するときだけ必要。

例題4:InputBoxで行数を受け取り、その行にサンプル文字を入れる

目的:ユーザー入力を処理する。

Sub FillRowWithText()
    Dim rowNum As Variant
    rowNum = InputBox("何行目に 'サンプル' を入れますか?(数字で入力)", "行指定")

    If rowNum = "" Then Exit Sub ' キャンセル時
    If Not IsNumeric(rowNum) Then
        MsgBox "数字を入力してください。"
        Exit Sub
    End If

    Dim r As Long
    r = CLng(rowNum)
    Cells(r, 1).Value = "サンプル"
End Sub
VB

注意:InputBoxは文字列を返すので IsNumericCLng で数値に変換します。

よくあるエラーと対処(初心者がつまずくポイント)

  • 「マクロが無効になっている」→ Excelのセキュリティ設定(ファイル→オプション→セキュリティセンター→マクロ設定)で一時的に有効にするか、信頼できるフォルダーにファイルを置く。
  • Sub or Function not defined → 呼び出し先の名前間違いや、Privateになっている場合。サブ名を確認。
  • Type mismatch → 変数型が合っていない(例:数値が来る想定なのに文字列が入ってきた)。IsNumericでチェックする。
  • 空白のセルに対する計算やオブジェクト参照のミス → If Not IsEmpty(cell) ThenIf Not (Selection Is Nothing) のようにガードする。

ちょっとしたベストプラクティス

  • 変数はできるだけ Dim で宣言する(Option Explicit をモジュールの先頭に書くと宣言漏れを防げます)。
  • 意味のあるプロシージャ名をつける(例:FormatInvoiceCalculateTax)。
  • コメント(')を入れて何をするコードか書く。未来の自分に親切。
  • 大きな処理は小さなSubに分けて整理する(「分割してテスト」が楽になる)。

マクロの応用アイデア(初心者が次にやると良いもの)

  • ボタンを作ってワンクリックで請求書フォーマットを整える。
  • CSV読み込み → データ整形 → 別シートへ出力。
  • 定期的に実行する処理を作り、クイックアクセスに登録。

まとめ

  1. Subは「処理の箱」。Sub 名前()End Sub で書く。
  2. VBEでモジュールを作ってコードを書く。
  3. MsgBox, Range, Cells, For/If 等をまず使ってみる。
  4. 少しずつ変数・分岐・ループを覚えると作れるものが一気に増える。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました