Excel

【Excel】エクセルVBAとは?マクロの基本・使い方・コードの書き方を解説

当サイトでは記事内に広告を含みます
いつも記事を読んでいただきありがとうございます!!! これからもお役に立てる各情報を発信していきますので、今後ともよろしくお願いします(^^)/

Excelの定型作業を何度も繰り返していると、転記や集計、書式設定に時間がかかる場面があります。

そのような作業を自動化する仕組みが、Excelで利用できるマクロとVBAです。

VBAを使うと、複数の操作を一連の処理として記録し、必要なときに実行できるようになります。

初めてコードを書く人でも、マクロの記録から始めれば、Excelの操作とVBAのつながりを理解しやすくなります。

この記事で分かるポイント

・VBAとマクロの違い

・VBEを使った基本コードの書き方

・セル操作、繰り返し、条件分岐の考え方

・マクロを安全に保存して実行する手順

サンプルでは、1行目に見出しが入った売上表を使い、データの書式設定や集計を自動化します。

それでは、Excel VBAの基本から順番に確認していきましょう。

 

Excel VBAを始めるためのマクロ記録と実行手順

商品名 数量 単価 売上
ノート 12 180 2160
ペン 8 120 960

それではまず、マクロを記録して実行する基本操作について解説していきます。

最初の一歩では、手入力でコードを作るよりも、マクロの記録で操作内容を確認する方法が分かりやすいでしょう。

 

開発タブの表示設定

VBAやマクロを使うには、リボンに開発タブを表示しておくと操作がスムーズです。

Excelのファイルタブからオプションを開き、リボンのユーザー設定で開発にチェックを入れます。

設定を保存すると、ホームや挿入などのタブと並んで開発タブが表示されます。

開発タブには、Visual Basic、マクロ、マクロの記録、挿入といった自動化に関するコマンドが集まっています。

開発タブを表示しても、普段のExcel操作や既存のブック内容が変わるわけではありません。

【操作のポイント】開発タブは一度表示すると、次回以降のExcel起動時にも基本的には表示された状態になります。

 

マクロ記録による操作の自動化

開発タブのマクロの記録をクリックすると、実行した操作をVBAとして記録できます。

マクロ名には、内容を判断しやすい名前を入力します。

たとえば売上列に通貨表示を設定する処理なら、売上書式設定のような名前が適しています。

記録開始後にD2からD3を選択し、ホームタブで桁区切りや通貨の表示形式を指定します。

作業を終えたら、開発タブの記録終了をクリックします。

この操作により、選択範囲と書式設定の内容がVBAコードとして保存されます。

記録中は不要なクリックもコードに残るため、目的の操作だけを短い手順で行うことが、読みやすいコードにつながります。

【操作のポイント】記録前に対象シートと対象セルを確認しておくと、意図しない選択操作の記録を減らせます。

 

マクロ一覧からの実行確認

記録済みのマクロは、開発タブのマクロ、またはAltキーとF8キーで開ける一覧から実行できます。

一覧でマクロ名を選び、実行をクリックすると、記録した操作が自動で再現されます。

実行前後でD列の表示形式を比べると、書式が一括で変わったことを確認できます。

処理が短時間で終わる場合でも、元に戻す操作だけに頼らず、コピーしたデータで試す習慣が大切です。

マクロの実行は、単なるショートカットではなく、決められたVBA命令を順番に動かす処理です。

【操作のポイント】初回は小さな範囲で実行し、対象セルや結果が想定どおりかを確認してから実務データへ広げましょう。

 

マクロとVBAの違いと自動化の仕組み

項目 内容
マクロ 複数の操作をまとめて実行する仕組み
VBA マクロの処理内容を記述するプログラミング言語
VBE VBAコードを確認、編集する画面

続いては、マクロとVBAの役割の違いを確認していきます。

言葉を分けて理解すると、どの機能を使えばよいか迷いにくくなります。

 

マクロが担う処理のまとまり

マクロとは、Excel上で行う複数の処理をひとまとめにし、必要なタイミングで実行する機能です。

セルのコピー、値の貼り付け、行の削除、並べ替え、印刷設定などを連続して実行できます。

毎週同じ形式のCSVデータを整える作業では、手順が固定されているほどマクロの効果が高くなります。

一方で、判断が必要な作業や例外が多い作業は、処理条件を細かく設計する必要があります。

マクロ化に向くのは、同じルールで何度も繰り返す作業です。

【操作のポイント】まずは毎回三分以上かかる定型作業を書き出し、その中から手順が安定している作業を選びます。

 

VBAが担うコードの記述

VBAはVisual Basic for Applicationsの略で、ExcelやWordなどのOfficeアプリケーションを操作するための言語です。

マクロの記録で作られた内容も、内部ではVBAコードとして保存されています。

コードを編集すると、記録機能だけでは作りにくい繰り返し処理や条件に応じた処理も実現できます。

たとえば数量が空白の行だけ色を付ける、指定した月のデータだけを別シートへ転記するといった処理です。

VBAを学ぶ目的は難しい命令を暗記することではなく、Excelの操作を条件どおりに動かすことです。

【操作のポイント】記録したマクロをVBEで開き、どの操作がどの命令に変換されたかを見るところから始めましょう。

 

VBEとモジュールの役割

VBEはVisual Basic Editorの略で、VBAのコードを作成、編集、実行するための画面です。

開発タブのVisual Basicをクリックするか、AltキーとF11キーを押すと開けます。

標準モジュールは、通常のマクロコードをまとめて置く場所です。

ブックやワークシートに関するイベント処理とは分けて管理すると、後から修正しやすくなります。

標準モジュールには、作業内容が分かる名前のプロシージャを作成するのが基本です。

【操作のポイント】複数のマクロを作る場合は、用途ごとにコメントを添え、似た処理を一つのモジュールへ整理します。

 

VBEで行うVBAコードの書き方

A列 B列 C列 D列
商品名 数量 単価 売上
ノート 12 180 B2*C2

続いては、VBEでコードを作成する流れについて解説していきます。

ここではD列の売上を計算し、見出し行に書式を設定するシンプルなマクロを作ります。

 

標準モジュールの挿入

VBEを開いたら、対象ブックを選択し、挿入メニューから標準モジュールを選びます。

表示されたModule1のような画面が、通常のVBAコードを書く場所です。

Book1.xlsm – Excel  − □ ×
ファイル ホーム 挿入 ページ レイアウト 数式 データ 校閲 表示 開発
Visual Basic  マクロ  挿入  コントロール  XML
fx 
A B C D
1 商品名 数量 単価 売上
2 ノート 12 180 =B2*C2
赤枠のセルを計算対象にします
➤

上の画面では、Excelの開発タブからVBEを起動し、標準モジュールへコードを記述する流れをイメージしています。

モジュールはワークシートのセルとは別の場所なので、コードを入力しても表の見た目がすぐに変わるわけではありません。

VBAの基本構造は、Subから始まりEnd Subで終わります。

この二つの行の間に、Excelへ実行させたい命令を書きます。

【操作のポイント】標準モジュールを追加した直後は、プロジェクトエクスプローラーでモジュールの場所を確認してから入力します。

 

セル参照と計算式の記述

セルを指定する代表的な書き方には、RangeとCellsがあります。

RangeはRange(“D2”)のように、A1形式のセル番地を指定する方法です。

CellsはCells(2, 4)のように、行番号と列番号でセルを指定します。

次のコードでは、D2に数量と単価を掛け算する数式を設定します。

Sub 売上を計算する()
    Range("D2").Formula = "=B2*C2"
End Sub

Formulaプロパティに入れる数式は、Excelの数式バーへ入力する内容とほぼ同じです。

文字列として指定するため、数式全体を二重引用符で囲みます。

売上の計算式は、数量×単価です。

D2セルでは、B2に入った数量とC2に入った単価を掛けます。

=B2*C2

数式をVBAで指定するときも、サンプルデータの1行目は見出しとして残し、データは2行目から扱うのが基本です。

【操作のポイント】Rangeのセル番地は、実際の表の配置と一致しているか、実行前に数式バーで確認しましょう。

 

プロシージャの実行と保存

コードを書いたら、VBE内でカーソルをプロシージャ内に置き、F5キーで実行できます。

Excel画面へ戻り、D2セルに計算結果が表示されたら成功です。

VBAを含むブックは、通常のxlsx形式では保存できません。

ファイルの種類でExcelマクロ有効ブックを選び、xlsm形式で保存します。

コードを作成したのに保存形式をxlsxにすると、VBA部分が失われるため注意が必要です。

【操作のポイント】重要なブックでは、元データ用のxlsxとマクロ実行用のxlsmを分けると、復元しやすくなります。

 

セル操作と繰り返し処理の基本

行 商品名 数量 単価 売上
2 ノート 12 180 2160
3 ペン 8 120 960

続いては、複数行のデータを扱うセル操作と繰り返し処理を確認していきます。

一件だけなら直接セルを指定できますが、行数が増えると最終行を取得して処理を繰り返す方法が便利です。

 

最終行の取得方法

表のデータ量が毎回変わる場合、最後のデータ行を自動で調べる必要があります。

A列に商品名が必ず入る運用なら、A列の最終入力セルを基準にできます。

Dim 最終行 As Long
最終行 = Cells(Rows.Count, 1).End(xlUp).Row

Rows.Countはシート内の最大行数を表し、End(xlUp)は下端から上へ向かって入力済みセルを探します。

その行番号をRowで取得すると、データの最終行を変数へ保存できます。

最終行を固定の数字で書かないことで、データが増減しても同じマクロを使いやすくなります。

変数は、処理途中で使う値を一時的に保存する箱のようなものです。

行番号には整数を扱えるLong型を使うと安心です。

【操作のポイント】最終行の判定に使う列は、途中に空白が入りにくい列を選びます。

 

For Nextによる数式の自動入力

For Nextは、開始値から終了値まで同じ処理を繰り返す構文です。

2行目から最終行までD列に数式を入れる場合は、次のように記述できます。

Sub 売上列を作成する()
    Dim 行 As Long
    Dim 最終行 As Long

    最終行 = Cells(Rows.Count, 1).End(xlUp).Row

    For 行 = 2 To 最終行
        Cells(行, 4).Formula = "=B" & 行 & "*C" & 行
    Next 行
End Sub

Cells(行, 4)は、繰り返し中の行番号とD列を表します。

数式内の行番号も変数と連結することで、2行目ではB2とC2、3行目ではB3とC3を参照します。

オートフィルを手作業で引っ張る処理も、VBAならデータの最終行まで一度に実行できます。

【操作のポイント】ループの開始行を2にすることで、1行目の見出しへ数式を書き込むミスを防げます。

 

書式設定の一括適用

計算後の売上列は、数値だけでなく表示形式も整えると読みやすくなります。

Range(“D2:D” & 最終行)のように書くと、2行目から最終行までの範囲を指定できます。

Range("D2:D" & 最終行).NumberFormatLocal = "#,##0"
Range("A1:D1").Font.Bold = True
Range("A1:D1").Interior.Color = RGB(33, 115, 70)

NumberFormatLocalは表示形式を設定するプロパティです。

Font.Boldは太字、Interior.Colorはセルの塗りつぶし色を設定します。

値の計算と書式設定を分けて書くと、後で修正する場所を見つけやすくなります。

【操作のポイント】書式を適用する前に、対象範囲が見出しを含むのか、データ行だけなのかを決めておきます。

 

条件分岐とエラー対策の考え方

商品名 数量 判定
ノート 12 通常
ペン 入力確認

続いては、条件によって処理を変える方法と、エラーを減らす考え方を確認していきます。

実務の表には空白や想定外の値が混ざることがあるため、条件分岐を入れると処理の安全性が高まります。

 

If文による空白セルの判定

If文は、条件に合う場合と合わない場合で処理を分ける構文です。

たとえばB列の数量が空白なら、D列に入力確認と表示する処理を作れます。

If Cells(行, 2).Value = "" Then
    Cells(行, 4).Value = "入力確認"
Else
    Cells(行, 4).Formula = "=B" & 行 & "*C" & 行
End If

空白の数量に対して計算式を入れるより、利用者へ確認を促す表示にした方が、データの不備を見つけやすくなります。

条件分岐は、正常なデータを処理するためだけでなく、問題のあるデータを見逃さないためにも役立ちます。

条件式では、等しいかどうかを確認するために等号を使います。

空白との比較では、二重引用符の間に文字を入れない形を使用します。

【操作のポイント】空白以外にも、数値かどうか、特定の文字が含まれるかなど、業務ルールに応じて条件を増やせます。

 

メッセージボックスによる完了通知

長い処理や複数のシートを扱う処理では、終了したことを通知すると分かりやすくなります。

MsgBoxを使うと、小さなメッセージ画面を表示できます。

MsgBox "売上の計算が完了しました"

処理の最後に置けば、利用者は実行終了を確認できます。

ただし、短いマクロで何度も表示すると操作の妨げになることもあります。

メッセージは、利用者が次の判断をするために必要な場面へ絞って表示するのが適切です。

【操作のポイント】完了通知には、何の処理が終わったのかが分かる短い文を指定します。

 

実行前のバックアップとデバッグ

VBAは多くのセルを短時間で変更できるため、実行前にバックアップを作ることが重要です。

特に行削除、上書き保存、別シートへの転記を行うコードでは、コピーしたブックで検証しましょう。

エラーが発生した場合は、VBEのデバッグをクリックすると、問題の行が強調表示されます。

変数名、シート名、セル番地、閉じ忘れた構文などを順番に確認します。

エラーは失敗ではなく、Excelが命令を正しく解釈できなかった箇所を知らせる手掛かりです。

【操作のポイント】最初から大きなコードを作らず、数行の処理を実行して確認しながら少しずつ追加します。

 

マクロ有効ブックの保存とセキュリティ設定

保存形式 VBAの保存 用途
xlsx 不可 通常のExcelブック
xlsm 可能 マクロを含むブック

続いては、VBAを保存して安全に使うためのポイントを確認していきます。

コードが完成しても、保存形式やセキュリティへの対応を誤ると、マクロを利用できないことがあります。

 

xlsm形式での保存

VBAコードを残すには、Excelマクロ有効ブックであるxlsm形式を選択します。

名前を付けて保存を開き、ファイルの種類からExcelマクロ有効ブックを選びます。

xlsx形式を選んだ状態でVBAを保存しようとすると、マクロが保存されないという警告が表示されます。

VBAを使うブックは、ファイル名だけでなく拡張子がxlsmになっているか確認しましょう。

元データを受け取るブックと、マクロを組み込んだブックを分けておくと、データ破損時の影響を小さくできます。

【操作のポイント】共有する際は、相手のExcel環境でもxlsm形式を開けることと、マクロの利用目的を伝えます。

 

マクロ警告への対応

インターネットから取得したファイルやメール添付ファイルでは、Excelがマクロの実行を制限する場合があります。

これは悪意のあるコードから利用者を守るための重要な機能です。

信頼できる作成者と入手経路を確認できないファイルでは、コンテンツの有効化を安易にクリックしてはいけません。

マクロを有効にする判断は、コードの便利さよりもファイルの信頼性を優先します。

業務で配布するマクロは、用途、作成者、実行後に変更される内容を明示すると、利用者が判断しやすくなります。

【操作のポイント】不明なファイルは、まず送信者へ確認し、必要に応じて組織の情報システム部門へ相談します。

 

信頼できる場所の管理

頻繁に使用する社内マクロを特定フォルダへ保存する場合、トラストセンターの信頼できる場所を利用する方法があります。

ただし、そのフォルダに入れたファイルは警告が表示されにくくなるため、保存先の管理が必要です。

誰でもファイルを置ける共有フォルダを信頼できる場所へ登録すると、セキュリティ上のリスクが高くなる可能性があります。

信頼できる場所は、管理者と利用目的が明確な限定フォルダだけに設定するのが基本です。

【操作のポイント】不要になった信頼できる場所は定期的に見直し、使っていない登録を削除します。

 

まとめ VBAで始めるエクセルのマクロ活用

Excel VBAとは、Excelの操作をコードで指示し、マクロとして自動実行するための仕組みです。

まずはマクロの記録を使い、手作業がどのようなVBAコードになるかを確認すると、学習の入口として役立ちます。

VBEでは標準モジュールにSubからEnd Subまでの処理を書き、RangeやCellsでセルを指定します。

データ表では1行目を見出しとして扱い、2行目から最終行までを繰り返し処理する考え方が基本です。

条件分岐を使えば、空白セルの確認や入力状態に応じた処理も行えます。

VBAを含むファイルはxlsm形式で保存し、信頼できないファイルのマクロは実行しないようにしましょう。

Excel VBAを使い始める流れ

・小さな定型作業をマクロ記録する

・記録されたコードをVBEで確認する

・セル参照と繰り返し処理を少しずつ書き換える

・バックアップを取り、xlsm形式で安全に保存する

基本的な命令を組み合わせるだけでも、転記、計算、書式設定、チェック作業の時間を減らせるかもしれません。

日常業務の中から繰り返し作業を一つ選び、まずは小さなVBAマクロとして試してみましょう。