Excel VBAマクロ入門|初めてのマクロを作る手順とよく使うコード10選

スポンサーリンク

「Excelのマクロって便利そうだけど、何から始めればいいかわからない」「プログラミング経験がないのに、自分にもできるのかな」。そんな悩みを抱えている事務職の方は本当に多いです。

毎日同じコピペや書式設定を繰り返していると、時間も体力も消耗しますよね。さらに人間がやる以上ミスもゼロにはできません。そこで頼りになるのが、Excelに標準搭載されているVBAマクロです。

この記事では、Excel初心者でもマクロの作り方が一通りわかるように、開発タブの表示から VBE(Visual Basic Editor)の使い方、最初の「Hello VBA!」マクロを動かすまでをステップで解説します。あわせて、実務でそのままコピペして使えるVBAコード10選、初心者がつまずきやすいポイントと回避策、よくある質問(FAQ)までまとめました。

読み終わるころには、自分の手元のExcelで最初のマクロを1つ動かせる状態になっているはずです。

ExcelのVBAマクロとは

VBAマクロとは、Excelの操作を自動化する仕組みのことです。手作業で行っている入力、コピペ、書式設定、集計、印刷などを、コードに置き換えて一括実行できる機能だと考えてください。

たとえば「毎月、複数のシートから売上を集計して、書式を整えて、PDFで保存する」という3時間かかる作業も、マクロを組んでしまえばボタン1つで30秒。月末の残業がそのまま減ります。

VBAとマクロの違い

「VBA」と「マクロ」は混同されがちですが、厳密には意味が異なります。

  • マクロ: Excelの操作を記録・再生して自動化する機能の総称
  • VBA: マクロを動かすためのプログラミング言語(Visual Basic for Applications)

つまり、VBAという言語を使って、マクロという仕組みを作るという関係です。料理にたとえるなら、マクロが「完成した料理」、VBAが「レシピを書く言語」のようなイメージですね。

「マクロの記録」機能を使えばVBAを書かずにマクロは作れますが、複雑な処理や条件分岐はVBAコードで書く必要があります。詳しくはExcel VBAとマクロの違いの記事で解説しています。

マクロでできること

マクロを使うと、以下のような作業を自動化できます。

  • データの入力・コピー・貼り付け
  • セルの書式設定(色・フォント・罫線・表示形式)
  • 複数シート・複数ブックへのデータ転記
  • 定型レポートの作成(月次・週次・日次)
  • ファイルの保存・印刷・PDF出力
  • メール送信(Outlook連携)
  • フォルダ内のファイル一括処理

特に「同じ作業を毎月繰り返している」「ファイル数が多くて手が回らない」といった作業は、マクロ化の効果が大きい領域です。手作業で10分かかる作業が、マクロなら数秒で終わることもあります。具体的な自動化の活用例はVBAで仕事を自動化する方法でも紹介していますよ。

マクロを使うメリットと注意点

メリットは大きく3つです。

  1. 時間短縮: ルーチン作業の所要時間を1/10〜1/100にできる
  2. ミス防止: 同じ手順を必ず同じ順番で実行できるので、転記ミス・計算ミスが激減する
  3. 属人化の解消: 「ベテランしかできない作業」をコード化することで、誰でも同じ品質で実行できる

一方で、注意点もあります。

  • 一度間違ったマクロを実行するとデータが大量に壊れる可能性がある → 必ずバックアップを取ってから実行する
  • マクロ有効ブック(.xlsm)は、メール添付時にウイルス対策ソフトに警告される場合がある
  • セキュリティ設定によっては、初回起動時にマクロを手動で有効化する必要がある

これらは慣れれば自然に対応できるようになるので、まずは怖がらず手を動かしてみるのがおすすめです。

初めてのExcelマクロを作る手順

ここからは、実際にマクロを作る手順を5ステップで説明します。プログラミング未経験でも大丈夫ですよ。

開発タブを表示する

Excelの初期設定では「開発」タブが非表示です。マクロ関連の操作はほぼすべてこのタブに集約されているので、まずは表示させましょう。

  1. 「ファイル」→「オプション」をクリック
  2. 左側のメニューから「リボンのユーザー設定」を選択
  3. 右側の一覧で「開発」にチェックを入れる
  4. 「OK」をクリック

これでリボンに「開発」タブが表示されます。Mac版Excelでも手順はほぼ同じで、「Excel」メニュー→「環境設定」→「リボンとツールバー」から設定できます。詳しい手順は開発タブを表示する方法を参照してください。

VBE(Visual Basic Editor)を開く

VBE(Visual Basic Editor)はVBAコードを書くための専用画面です。Excelとは別ウィンドウで開きます。以下のいずれかの方法で起動しましょう。

  • 「開発」タブ →「Visual Basic」をクリック
  • ショートカットキー: Alt + F11(Windowsの場合)
  • Macは Option + F11

VBEが開くと、左側に「プロジェクトエクスプローラー」が表示されます。ここに、今開いているブックやシートの一覧が階層的に並んでいますよ。慣れないうちはやや無機質な画面に見えますが、使う場所は決まっているので大丈夫です。

標準モジュールを追加する

VBAコードは「標準モジュール」と呼ばれる場所に書きます。シートやブックに直接書く方法もありますが、最初は標準モジュールに統一しておくのが整理しやすいです。

  1. VBEのメニューから「挿入」→「標準モジュール」をクリック
  2. プロジェクトエクスプローラーに「Module1」が追加される
  3. 右側に白いコード入力画面が表示される

この白い画面にコードを書いていきます。モジュール名は後から変更できますが、最初は Module1 のままで問題ありません。

コードを入力して実行する

試しに、メッセージを表示するコードを書いてみましょう。

Sub はじめてのマクロ()
    MsgBox "Hello VBA!"
End Sub

Sub から End Sub までが1つのマクロです。Sub の後ろの「はじめてのマクロ」がマクロ名で、好きな名前を付けられます(日本語OK・スペースNG)。

入力できたら、以下の方法で実行します。

  1. カーソルをコードの中(SubEnd Sub の間)に置く
  2. F5 キーを押す(または「実行」→「Sub/ユーザーフォームの実行」)

「Hello VBA!」というメッセージが表示されたら成功です。この瞬間が、はじめての自動化が動いた瞬間です。小さく見えるかもしれませんが、ここから先はコードを書き換えるだけで、いくらでも動きを応用できます。

マクロ有効ブック(.xlsm)で保存する

マクロを含むファイルは、通常の .xlsx 形式では保存できません。「マクロ有効ブック(.xlsm)」で保存する必要があります。

  1. 「ファイル」→「名前を付けて保存」をクリック
  2. 保存場所を選ぶ
  3. ファイルの種類で「Excelマクロ有効ブック(*.xlsm)」を選ぶ
  4. 「保存」をクリック

.xlsx のまま保存すると、警告ダイアログとともにマクロが消えてしまいます。せっかく書いたコードが消えるとがっかりするので、最初の保存タイミングで .xlsm を選んでおきましょう。ファイル形式の詳しい違いはVBAのファイル形式で解説していますよ。

よく使うVBAコード10選

ここからは、実務でよく使うVBAコードを10個紹介します。コピーしてVBEに貼り付ければ、すぐに試せます。最初のうちは「コードの意味を理解する」よりも「動かしてみて挙動を観察する」ほうが上達が早いです。

1. セルに値を入力する

Sub セルに入力()
    Range("A1").Value = "売上データ"
    Range("B1").Value = 10000
End Sub

Range("A1") でセル A1 を指定し、.Value で値を代入しています。"売上データ" のように文字列はダブルクォーテーションで囲み、数値はそのまま書きます。

Rangeの使い方でセル指定の基本を学べます。Cellsを使った指定方法もあるので、RangeとCellsの違いもあわせて確認してみてください。

2. セルの値を別のセルにコピーする

Sub セルをコピー()
    Range("A1").Copy Destination:=Range("B1")
End Sub

Copy メソッドに Destination を指定すると、貼り付け先を直接選べます。値だけコピーしたい場合は、次のように書きます。

Range("B1").Value = Range("A1").Value

書式までコピーする必要がないなら、こちらのほうが処理が軽くておすすめです。

3. 最終行を取得する

Sub 最終行を取得()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    MsgBox "最終行は " & lastRow & " 行目です"
End Sub

データの末尾を自動で見つける最頻出パターンです。「A列の一番下までジャンプして、そこから上方向に最初のデータを探す」という動作を表しています。

データ件数が日々変わるリストでは、毎回最終行を取得してからループや集計を書くのが定石です。詳しくはVBA最終行の取得で3つの方法を比較しています。

4. 指定範囲をクリアする

Sub 範囲をクリア()
    Range("A1:D10").ClearContents
End Sub

ClearContents は値だけを消します。書式(罫線・色・フォントなど)はそのまま残ります。書式も含めて消したい場合は次のように書きましょう。

Range("A1:D10").Clear            ' 値も書式も消す
Range("A1:D10").ClearFormats     ' 書式だけ消す

定型フォーマットを使いまわすマクロでは、最初に範囲をクリアしてから新しいデータを入れる、というパターンが頻出します。

5. メッセージボックスを表示する

Sub メッセージ表示()
    MsgBox "処理が完了しました"
End Sub

処理の完了通知や確認ダイアログに使います。ユーザーに状況を伝えるのに便利ですよ。

ボタンを「はい・いいえ」にして分岐させたい場合は次のように書きます。

Sub 確認ダイアログ()
    Dim ret As VbMsgBoxResult
    ret = MsgBox("本当に削除しますか?", vbYesNo + vbQuestion)
    If ret = vbYes Then
        Range("A1:D10").ClearContents
    End If
End Sub

データを消すような「取り返しのつかない処理」では、必ず確認ダイアログを入れるのが安全運用のコツです。

6. 条件によって処理を変える(If文)

Sub 条件分岐()
    If Range("A1").Value >= 100 Then
        MsgBox "100以上です"
    Else
        MsgBox "100未満です"
    End If
End Sub

If...Then...Else で条件によって処理を切り替えられます。条件が3つ以上ある場合は ElseIf を使います。

If score >= 80 Then
    MsgBox "A評価"
ElseIf score >= 60 Then
    MsgBox "B評価"
Else
    MsgBox "C評価"
End If

詳しい使い方はVBA If文の使い方で解説していますよ。

7. 同じ処理を繰り返す(For文)

Sub 繰り返し処理()
    Dim i As Long
    For i = 1 To 10
        Cells(i, 1).Value = i
    Next i
End Sub

A1からA10まで連番を入力するコードです。Cells(i, 1) は「i行目・1列目」を表すので、i が1〜10と変化するたびに違うセルに値が入る仕組みですね。

実務では、先ほどの「最終行を取得」と組み合わせて、データ件数ぶんだけ繰り返す書き方がよく出てきます。

Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
    Cells(i, 3).Value = Cells(i, 1).Value * Cells(i, 2).Value
Next i

For...Next 文の基本はVBA For~Next文の使い方で詳しく学べます。

8. セルの書式を変更する

Sub 書式変更()
    Range("A1").Font.Bold = True
    Range("A1").Font.Color = RGB(255, 0, 0)
    Range("A1").Interior.Color = RGB(255, 255, 200)
End Sub

太字・文字色・背景色をコードで設定できます。RGB(R, G, B) は0〜255の3つの数字で色を指定する関数で、RGB(255, 0, 0) は赤、RGB(0, 0, 0) は黒、RGB(255, 255, 255) は白です。

手作業で何十セルも書式設定するより、ずっと速いですよ。たとえば「マイナスの値だけ赤字にする」ような条件付き書式と組み合わせれば、レポートの見映えを自動で整えられます。

9. シートを追加・名前を変更する

Sub シート追加()
    Worksheets.Add After:=ActiveSheet
    ActiveSheet.Name = "集計用"
End Sub

新しいシートを追加して、名前を付けるコードです。After:=ActiveSheet を指定すると、現在のシートの右側に追加されます。月次レポートの自動作成などで活躍します。

同じ名前のシートがすでにあるとエラーになるので、実務では次のように分岐させると安全です。

On Error Resume Next
Worksheets("集計用").Delete
On Error GoTo 0
Worksheets.Add(After:=ActiveSheet).Name = "集計用"

10. ファイルを保存して閉じる

Sub 保存して閉じる()
    ActiveWorkbook.Save
    ActiveWorkbook.Close
End Sub

処理の最後にファイルを保存して閉じるパターンです。複数ファイルの一括処理で重宝しますよ。

「上書き保存ではなく別名保存したい」場合は次のように書きます。

ActiveWorkbook.SaveAs Filename:="C:reportsmonthly.xlsm", _
    FileFormat:=xlOpenXMLWorkbookMacroEnabled

xlOpenXMLWorkbookMacroEnabled がマクロ有効ブック(.xlsm)の保存形式を表します。

マクロ作成で失敗しないコツ3つ

VBA初心者がつまずきやすいポイントと対策を紹介します。ここを押さえておくと、勉強の途中で挫折しにくくなります。

Option Explicitで変数を宣言する

コードの先頭に Option Explicit を書くと、変数の宣言が必須になります。

Option Explicit

Sub サンプル()
    Dim total As Long
    total = 100
    MsgBox total
End Sub

Option Explicit を入れておくと、たとえば totaltotall と打ち間違えたとき、コンパイル時にエラーで止まってくれます。逆にこれがないと、タイプミスが「新しい変数」として扱われ、計算結果が0になるなど、原因のわかりにくいバグを生みます。

毎回手で書くのは面倒なので、VBEの「ツール」→「オプション」→「変数の宣言を強制する」にチェックを入れておけば、新しいモジュールに自動で Option Explicit が挿入されます。設定方法はOption Explicitの使い方を参照してください。

変数の種類やデータ型について詳しく知りたい方は、VBA変数の使い方もあわせてどうぞ。

まずはマクロの記録から始める

コードの書き方がわからないときは、「マクロの記録」を活用しましょう。Excelの操作を記録して、VBAコードに変換してくれる機能です。

  1. 「開発」タブ →「マクロの記録」をクリック
  2. マクロ名を決めて「OK」
  3. 自動化したい操作を手動で行う(書式設定・フィルタ・並び替えなど)
  4. 「記録終了」をクリック
  5. Alt + F11 でVBEを開き、生成されたコードを確認

記録されたコードは冗長になりがちで、そのままでは使いにくいケースも多いですが、「この操作はVBAでどう書けばいいのか」を確認するレシピ集として最強です。とくに、Excelの機能名と英語のオブジェクト名が結びついていない初心者には強い味方になります。詳しくはマクロの記録の使い方で手順を解説していますよ。

エラーが出たらデバッグする

VBAのコードにエラーはつきものです。エラーが出ても慌てないでください。むしろ初心者のうちは、エラーに出会う回数の多さがそのまま上達スピードに直結します。

  • コンパイルエラー: コードの文法ミス。実行前に検出され、赤字や黄色で該当箇所が表示される
  • 実行時エラー: 実行中に発生。「デバッグ」ボタンを押すと問題箇所が黄色くハイライトされる
  • 論理エラー: 動くけど結果が間違っている、いちばん厄介なタイプ

デバッグの基本テクニックは次の3つです。

  1. ステップ実行: F8 キーを押すと、コードを1行ずつ実行できる。どこで値がおかしくなったか追える
  2. ローカルウィンドウ: 「表示」→「ローカルウィンドウ」で、変数の中身をリアルタイムに確認できる
  3. イミディエイトウィンドウ: Ctrl + G で開き、Debug.Print 変数名 の出力結果や、その場で式を評価できる

もしマクロが止まらなくなった場合は、Esc キーや Ctrl + Break で中断できます。それでも止まらない場合はマクロが止まらない時の強制終了を参考にしてください。

よくある質問(FAQ)

最後に、Excel VBAマクロを始める初心者の方からよく寄せられる質問にまとめて回答します。

Q1. プログラミング未経験でもVBAは学べますか?

学べます。VBAは「Excelの操作をそのまま命令文に書く」イメージに近い言語なので、PythonやJavaなどに比べてとっつきやすいです。本記事のコード10選を順番に動かして、挙動を観察するところから始めれば十分です。

ただし、独学だけだと「目的に合うコードが調べられない」状態になりやすいので、入門書を1冊通読する、またはExcel VBA学習ロードマップのような体系的なガイドを併用するのがおすすめです。

Q2. マクロを実行しようとすると「マクロが無効です」と表示されます

セキュリティ設定でマクロがブロックされている状態です。「ファイル」→「オプション」→「トラストセンター」→「トラストセンターの設定」→「マクロの設定」から、「警告を表示してすべてのマクロを無効にする」を選ぶと、開いたときに有効化ボタンが出るようになります。

社内ポリシーでマクロが完全に禁止されている環境では、IT部門に相談する必要があります。

Q3. 作ったマクロを他の人に配布できますか?

可能です。マクロ有効ブック(.xlsm)として保存したファイルをそのまま渡せば、相手も同じマクロを使えます。ただし、相手側でもマクロを有効化する必要があるので、初回のみ操作ガイドを添えておくと親切です。

複数のファイルで同じマクロを使い回したい場合は、「アドイン(.xlam)」として保存する方法もあります。

Q4. 「マクロの記録」だけでは足りないと感じるのはどんな時ですか?

主に次の3パターンです。

  • 条件によって処理を変えたい: 記録だけでは If 文は作れない
  • 件数の違うデータを処理したい: 記録は「絶対参照」で固定されるため、最終行取得との組み合わせが必要
  • 複数のブック・フォルダにまたがる処理: ファイル名やパスを動的に変える必要がある

このあたりに踏み込みたくなったタイミングが、VBAコードを自分で書き始める良いきっかけです。

Q5. 学習にどれくらいの時間がかかりますか?

「最初のマクロを動かす」までなら、本記事を読みながら30分〜1時間で到達できます。「業務で使えるレベル」までは、1日30分ずつで1〜2ヶ月が目安です。

実務で使うコードは、RangeCellsIfForDimMsgBox の組み合わせがほとんどなので、最初に基礎をしっかり押さえれば応用は自然に効くようになります。

まとめ

この記事では、Excel VBAマクロの作り方を初心者向けに解説しました。

この記事のポイント

  • VBAはマクロを動かすプログラミング言語。マクロは操作を自動化する仕組み
  • 開発タブの表示 → VBE起動 → モジュール追加 → コード入力 → .xlsmで保存の5ステップで始められる
  • よく使うコード10選(値入力・コピー・最終行取得・クリア・MsgBox・If・For・書式・シート追加・保存)を覚えれば、実務の自動化がすぐに始められる
  • Option Explicit と「マクロの記録」を活用すれば、初心者でもミスを減らせる
  • エラーは怖くない。F8 のステップ実行とローカルウィンドウで原因を1行ずつ特定する

最初の1つを動かしてしまえば、あとは応用の連続です。「今、自分が手作業でやっていること」を1つ選び、それをマクロ化するところから取り組んでみてください。

関連記事

VBAの基礎を身につけたら、次のステップに進んでみましょう。

タイトルとURLをコピーしました