ここからは、さきほどの「Subプロシージャ(VBAの基本)」を実際に 自分のExcelで練習できるマクロ付きブック にする手順を、完全初心者向けに「ゼロから順番に」説明します。
準備:ExcelでVBA(マクロ)を使えるようにする
① 開発タブを表示する
- Excelを開きます。
- メニューで「ファイル」→「オプション」を開きます。
- 「リボンのユーザー設定」を選び、右側の一覧で「開発」にチェックを入れます。
- OK を押すと、リボンに「開発」タブが追加されます。
手順1:マクロ有効ブック(*.xlsm)として保存する
- 新しいブックを開く。
- 「ファイル」→「名前を付けて保存」→
保存形式を 「Excel マクロ有効ブック (*.xlsm)」 にする。
(例:VBA練習用.xlsm) - デスクトップなど、分かりやすい場所に保存。
📌これをしないと、VBAを入れても保存時にマクロが消えます!
手順2:VBAエディタ(VBE)を開く
- 「開発」タブをクリック。
- 左端の「Visual Basic」を押す。
→ 新しいウィンドウ(VBE)が開きます。
手順3:標準モジュールを追加してコードを書く
- VBEでメニューの「挿入」→「標準モジュール」をクリック。
→ 左側に「Module1」が現れます。 - 右側の大きな白い画面に以下のコードを貼り付けます。
練習用サンプルコード
' === VBA練習用マクロ ===
Option Explicit
' 1. 挨拶メッセージを表示する
Sub Hello()
MsgBox "こんにちは!Excel VBAの練習を始めましょう!"
End Sub
' 2. 選択したセルを黄色に塗る
Sub HighlightSelection()
If TypeName(Selection) <> "Range" Then
MsgBox "セルを選択してから実行してください。"
Exit Sub
End If
Selection.Interior.Color = vbYellow
End Sub
' 3. 列Aの合計を計算して表示
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手順4:マクロを実行してみよう
方法A:VBEで実行
Sub Hello()の中にカーソルを置く。- F5キーを押す。
- 「こんにちは!」と表示されたら成功!
方法B:Excel側から実行
- Excel画面に戻って「開発」タブをクリック。
- 「マクロ」ボタンを押す(または Alt + F8)。
- 一覧に「Hello」「HighlightSelection」「SumColumnA」が出る。
- 実行したいマクロを選んで「実行」。
手順5:ボタンからマクロを動かす(便利!)
- Excelの「開発」タブ → 「挿入」 → 「フォームコントロール」内の「ボタン」をクリック。
- シート上にドラッグして配置。
- 「マクロの登録」ダイアログが出るので、
Helloを選んで「OK」。 - ボタンに「あいさつ」と書く。
- ボタンをクリック → メッセージが出たら成功! 🎉
(同じように「HighlightSelection」「SumColumnA」も登録できます)
よくあるトラブルと対処
| 問題 | 原因 | 対処法 |
|---|---|---|
| マクロが動かない | セキュリティで無効 | 「ファイルを開いた時の黄色い警告バー」で「コンテンツの有効化」をクリック |
| マクロが保存されない | .xlsx 形式で保存 | 「.xlsm」で保存し直す |
| 実行時エラーが出る | セルを選んでいない、変数の型ミス | If や IsNumeric でガードを追加 |
| ボタンを押しても何も起こらない | ボタンにマクロが未割り当て | 右クリック→「マクロの登録」で再設定 |
発展練習(やってみると身につく!)
| 練習内容 | ヒント |
|---|---|
InputBoxでユーザーに名前を入力させ、MsgBoxで挨拶 | Dim name As String : name = InputBox("お名前は?") : MsgBox name & "さん、こんにちは!" |
| ボタンをクリックしたら今日の日付をA1セルに入れる | Range("A1").Value = Date |
| 列AのデータをB列にコピー | Range("A1:A10").Copy Range("B1") |
最後に:学習の進め方のコツ
- 小さなマクロを1つずつ動かす(いきなり大きな処理を作らない)。
- エラーを恐れず、原因を調べて直す(実はこれが一番の練習になります)。
- MsgBoxで値を確認しながら進める(「いま何が入ってる?」を常に意識)。
- 同じ処理を2回手でやったら、自動化を考える!(VBAの出番です)。

