Excel VBA を「完全に理解する」ための基礎を 1記事で全部まとめた保存版 です。
- そもそも VBA とは?
- どこまで自動化できる?
- 書き方・構文・文法
- よく使う命令の“実務的な使い方”
- 初心者が必ずつまずくポイント
- コピペしてすぐ動くコード例
VBA は“覚える量”よりも“考え方”が大切なので、
この記事では 概念 → コード例 → 実務解説 の流れで理解できるように解説します。
1. Excel VBAとは?できること・できないことの本質
1-1. Excel VBAは「Excelを自動操作するリモコン」
VBAとは簡単に言えば、
パソコンに「Excelでこう動いて」と命令するための言語
Excelの操作を自動化できるため、
クリックや入力・コピー&ペーストなどの繰り返し作業を“ゼロ”にできます。
1-2. VBAでできること
- シート間のデータ転記
- CSV の自動取込
- 複数ブックの一括処理
- PDF 出力の自動化
- OutlookやWordとの連携
- フォルダ内ファイルの処理
1-3. VBAでできないこと
- Excel の外の OS 操作は制限が多い
- 特殊なデバイス制御は苦手
- GUI(アプリ画面)を作るのも得意ではない
2. VBAを書く準備|初期設定と最初に覚えるべき操作
2-1. 開発タブを出す
- ファイル → オプション
- リボンのユーザー設定
- 開発タブにチェック
2-2. 実行の最速ショートカット
F5:実行F8:1行ずつ実行(超重要)Ctrl + Space:コード補完
3. VBAの基本構文|必ず覚える8つの要素
ここからは 「Excelに命令を書く」ための文法 を解説します。
3-1. Sub(プロシージャ)宣言
Sub Sample()
MsgBox "こんにちは"
End SubExcelに「あ、ここから命令が始まるんだな」と伝える“入口”です。
3-2. 変数の宣言
Dim name As String
Dim price As Long
Dim flag As BooleanString:文字列Long:整数Boolean:True/FalseDouble:小数
変数=情報を入れる箱 です。
3-3. 値の代入
name = "Tabigrammer"
price = 1200
flag = True3-4. If 条件分岐
If price > 1000 Then
MsgBox "高いです"
Else
MsgBox "安いです"
End If条件によって処理を変えたいときに使います。
3-5. For ループ
Dim i As Long
For i = 1 To 10
Cells(i, 1) = i
Next i繰り返しの自動化の中心。
3-6. Select Case(複数条件)
Select Case price
Case 0
MsgBox "無料"
Case 1 To 999
MsgBox "安い"
Case Else
MsgBox "高い"
End Select3-7. With(同じ対象にまとめて命令)
With Range("A1")
.Value = "こんにちは"
.Font.Bold = True
.Interior.Color = vbYellow
End With3-8. MsgBoxとInputBox
MsgBox "完了しました"
Dim user As String
user = InputBox("名前を入力してください")4. 最重要:RangeとCellsの使い分け
4-1. Range(住所指定)
Range("A1").Value = "OK"
Range("B2:C5").ClearContents4-2. Cells(行番号 × 列番号で指定)
Cells(1, 1).Value = "OK" ' A1
Cells(3, 5).Value = 100 ' E34-3. 実務ではRangeとCellsの併用が最強
Range("A1").Offset(1, 0).Value = "下のセル"## 5. シート操作の基本(最重要)
Worksheets("売上").Range("A1") = 100
Sheets(1).Cells(1, 1) = "Hello"Tip:実務では必ず「シートをFixする」方が事故が起きない
Dim ws As Worksheet
Set ws = Worksheets("売上")
ws.Range("A1") = 1006. よく使う実務コード|コピペで使える
6-1. 特定フォルダから Excel を全部読み込む
Dim f As String
Dim path As String
path = "C:\Test\"
f = Dir(path & "*.xlsx")
Do While f <> ""
Workbooks.Open path & f
' ここに処理を書く
Workbooks(f).Close SaveChanges:=False
f = Dir()
Loop6-2. 最終行の取得(鉄板)
Dim last As Long
last = Cells(Rows.Count, 1).End(xlUp).Row6-3. CSVを自動取り込み
Workbooks.Open "C:\Data\sample.csv"6-4. 一括でPDF出力
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:="C:\Test\output.pdf"7. エラー対策|On Errorの正しい使い方【完全版】
VBA では エラー処理を書かないと、処理が途中で止まる“未完成の自動化” になります。
業務では 「止まる自動化」は使い物にならない ため、On Error の理解は必須です。
ここでは実務で通用するために必要なすべてをまとめました。
7-1. On Error の基本構文
On Error GoTo ErrHandler ' エラー時にジャンプする先を指定
' ---- メイン処理 ----
Range("A1") = 100
Exit Sub ' 正常終了時はハンドラーに流れないようにする
' ---- エラーハンドラー ----
ErrHandler:
MsgBox "エラー発生:" & Err.DescriptionOn Error GoTo ErrHandler
エラーが起きるとErrHandler:に飛ぶExit Subを必ず入れる
正常時にハンドラーまで流れてしまうのを防ぐErr.Descriptionでエラー内容を取得できる
7-2. On Error の種類と使い分け【実務必須】
✔ On Error GoTo ラベル
→ 一番使う。“エラーが出たらまとめて処理”
On Error GoTo ErrHandler✔ On Error Resume Next
→ “エラーを無視して次へ進む”。
限定的に使うのはOKだが、多用は危険
On Error Resume Next
value = Cells(1, 1).Value ' 存在しなくても止まらない
On Error GoTo 0 ' 解除(これ重要)✔ On Error GoTo 0
→ エラー処理を解除して“通常の挙動”に戻す
(Resume Next の後は必ず使う)
7-3. 実務で必須「Finally」の考え方
VBA には Finally がありません。
しかし、常に実行したい処理(例:ファイルを閉じる)は独自に書く必要があります。
On Error GoTo ErrHandler
Set wb = Workbooks.Open("C:\test.xlsx")
' --- 本来の処理 ---
MsgBox wb.Sheets(1).Range("A1").Value
CleanExit:
If Not wb Is Nothing Then wb.Close SaveChanges:=False
Exit Sub
ErrHandler:
MsgBox "エラー:" & Err.Description
Resume CleanExitこれができてはじめて“止まらない自動化”になります。
7-4. Resume の正しい使い方
Resume は “どこから処理を再開するか” を指定します。
| 種類 | 意味 |
|---|---|
| Resume | エラーが発生した行から再実行 |
| Resume Next | エラーの次の行から実行 |
| Resume ラベル | 指定した行にジャンプして実行 |
例:
ErrHandler:
If Err.Number = 1004 Then
Resume Next ' 関係ないエラーなら次の処理へ
Else
Resume Critical ' 特定エラーは別処理へ
End If7-5. よくある「ダメなエラー処理」
結論、On Error Resume Next だけ書くというものです。
On Error Resume Next
Workbooks.Open "aaa.xlsx" ' 失敗しても分からない
Sheets(1).Range("A1") = 1→ エラーを見失う。
→ デバッグ不能になる
必ずエラー解除 or チェックを入れる。
7-6. 実務で使える“最強テンプレ”【コピペOK】
以下が 実務で100%使えるプロ仕様のテンプレ です。
Sub Main()
On Error GoTo ErrHandler
' ---- 変数宣言 ----
Dim wb As Workbook
Dim path As String: path = "C:\test.xlsx"
' ---- メイン処理 ----
Set wb = Workbooks.Open(path)
MsgBox wb.Sheets(1).Range("A1").Value
CleanExit:
' ---- 必ず実行する後処理 ----
If Not wb Is Nothing Then
wb.Close SaveChanges:=False
End If
Exit Sub
ErrHandler:
MsgBox "エラー:" & Err.Number & vbCrLf & Err.Description
' 必ず後処理に流す
Resume CleanExit
End Subこれだけで 止まらない・壊れない・後片付けできる自動化 が作れるようになります。
7-7. 実務での判断基準まとめ
| ケース | 正しい書き方 |
|---|---|
| 通常のマクロ | GoTo ラベル(基本) |
| 存在しないかもしれないオブジェクト | Resume Next+エラーチェック |
| ファイルを必ず閉じたい | CleanExit を作って Resume CleanExit |
| デバッグ中 | On Error は一切書かずに動作確認 |
| 運用フェーズ | “止まらない”エラーハンドリングを必ず入れる |
8. まとめ:VBAは「作業の自動化の言語」
Excel VBAは覚える量が多いように見えますが、実は 基本構文 × Range/Cells × ループ の3つだけでほぼ全部できます。

コメント