初心者向けにやさしく、丁寧に、例題つきで解説します。実際に手を動かしながら学べるように、「何をするか」「どこに書くか」「実行の仕方」「よくある例(サンプルコード)」と「注意点」を順にまとめます。さっそくいきましょう!
Subプロシージャ(マクロ)とは — 超かんたん説明
- Subプロシージャは「処理のまとまり(命令のグループ)」。Excelに対して「これをやってね」と指示を書く箱です。
- 書き方(最小形):
Sub サンプル名()
' ここに処理を書く
End Sub
VBVBE(Visual Basic Editor)を開いて書く手順(初心者向け)
- Excel を開く。
- リボンで「開発」タブが見えない場合:
- 「ファイル」→「オプション」→「リボンのユーザー設定」→右側で「開発」にチェックを入れて OK。
- 「開発」タブ → 「Visual Basic」ボタンをクリックすると VBE(エディタ)が開く。
- VBE のメニューで
挿入→標準モジュールを選ぶ。左側にModule1ができる。 - そのコードウィンドウに 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/Next、If/Then/End If:ループや条件分岐。ActiveSheetやWorksheets("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は文字列を返すので IsNumeric と CLng で数値に変換します。
よくあるエラーと対処(初心者がつまずくポイント)
- 「マクロが無効になっている」→ Excelのセキュリティ設定(ファイル→オプション→セキュリティセンター→マクロ設定)で一時的に有効にするか、信頼できるフォルダーにファイルを置く。
Sub or Function not defined→ 呼び出し先の名前間違いや、Privateになっている場合。サブ名を確認。Type mismatch→ 変数型が合っていない(例:数値が来る想定なのに文字列が入ってきた)。IsNumericでチェックする。- 空白のセルに対する計算やオブジェクト参照のミス →
If Not IsEmpty(cell) ThenやIf Not (Selection Is Nothing)のようにガードする。
ちょっとしたベストプラクティス
- 変数はできるだけ
Dimで宣言する(Option Explicitをモジュールの先頭に書くと宣言漏れを防げます)。 - 意味のあるプロシージャ名をつける(例:
FormatInvoice,CalculateTax)。 - コメント(
')を入れて何をするコードか書く。未来の自分に親切。 - 大きな処理は小さなSubに分けて整理する(「分割してテスト」が楽になる)。
マクロの応用アイデア(初心者が次にやると良いもの)
- ボタンを作ってワンクリックで請求書フォーマットを整える。
- CSV読み込み → データ整形 → 別シートへ出力。
- 定期的に実行する処理を作り、クイックアクセスに登録。
まとめ
- Subは「処理の箱」。
Sub 名前()~End Subで書く。 - VBEでモジュールを作ってコードを書く。
MsgBox,Range,Cells,For/If等をまず使ってみる。- 少しずつ変数・分岐・ループを覚えると作れるものが一気に増える。

