VBAとマクロの違いは?できることから基本コードまで徹底解説

最終更新日:2023年10月20日

Microsoft社のオフィス製品に搭載されている「VBA」と「マクロ」は、どちらもルーチンワークの自動化や効率化に使われる機能です。一般的には「VBA=マクロ」と言われることもありますが、厳密にいうと両者は全く別の存在です。特にVBAは汎用性の高いスキルであるため、マクロとの違いや「何ができるのか」を理解し、実践につなげていきましょう。作業の効率化を求めるエンジニア向けにVBAとマクロの違いや、それぞれができること・できないことを解説します。

今もらっている年収は高い?低い?

支援実績10年の登録者データを基にした エンジニア・クリエイター専門 年収診断 無料診断START

この記事のまとめ

  • マクロは作業記録を自動でVBAに変換する機能
  • マクロは作業記録を保存し作成するのに対して、VBAはプログラミングして自動化しなければならない
  • VBAの方が自動化できる作業の幅が広い

VBAとマクロは何が違う?

VBAとは、Microsoft OfficeのExcelやWordなどで使える便利な機能を指します。マクロも同じくMicrosoft Officeに搭載されている機能であるため、両者はしばしば同じ意味合いで考えられがちです。

作業効率化や最適化のためにはぜひ習得しておきたい機能ですが、まずはVBAとマクロとはどのような特徴を持つのか、それぞれの違いをチェックしておきましょう。

関連記事:VBAの将来性は?概要やマクロとの違い・仕事での活用法も解説

VBAとは

VBAの正式名称は「Visual basic for applications」で、Micorsoft社が開発したプログラミング言語「VB(Visual basic)」のオフィス製品版と言える存在です。WindowsOS内での使用を想定しており、VBE(Visual Basic Editer)という編集用アプリケーションを使用して記述を行います。

マクロとは

一方で、マクロは「特定の操作を記録・再生(実行)する機能」の総称です。オフィス製品に限らず、アプリケーションやソフトウェアの操作を自動化する機能として広く使われています。WindowsOS内であれば、Word・PowerPoint・Outlookなどでもマクロを利用することができるでしょう。また、Adobe社のPhotoshop / Illustratorに搭載されている「アクション」機能もマクロのひとつです。

VBAとマクロの違い

VBAは主にオフィス製品を対象としたプログラミング言語であり、マクロは作業記録・自動化のための機能です。つまり、「プログラミング言語」と「コンピュータ上で動作する汎用的な機能」という違いがあります。

例えばExcelの場合、マクロ記録を使えば手入力の作業を記録して保存し、任意のタイミングで再生することが可能ですが、記録できる内容には制限があります。
一方、VBAを使ったプログラミングでマクロを作成すれば、動作範囲や実行回数、実行条件などを細かく制御できます。

VBAでできること・できないこと

次に、VBAとマクロができること・できないことを紹介します。ここでは主にExcel上の操作を想定して解説します。

VBAでできること

VBAができることは非常に多く、小規模な業務システムであればVBAのみで実装することも可能です。また、経理・営業・総務といった非IT部門の人材がVBAを使いこなせると、事務作業の効率が大幅に向上します。ここではVBAができる具体例を4つ紹介します。

  • ・マクロの作成

    ・文字列操作と変換

    ・Web API連携

    ・手作業の記録と編集、自動化

それぞれ詳しく見ていきましょう。

マクロの作成

先述の通り、マクロとはExcelでの作業手順を記録し、自動化する機能を指します。このマクロの作成ができるのは、VBAの大きな特徴です。

文字列操作とデータ変換処理

Excel VBAでは、VBA内の関数によって文字列操作やデータ変換処理ができます。下記は、VBAに搭載されている文字列操作・データ変換処理用関数の一例です。

  • ・Int…指定した数値の整数部だけを返す

    ・Join…任意の文字列を区切り文字で結合して返す

    ・CSng…指定した値を数値型(Single)に変換

    ・CStr…指定した値を文字列型(String)に変換

    ・FormatCurrency…システムで定義されている通貨形式で文字列を返す

このほかにも、指定した日時形式に文字列を変換する関数や、パーセント形式に変換する関数などもあります。

WebAPI連携

VBAから外部APIを呼び出すことで、外部システム(Webサイト・アプリなど)の処理をローカルのVBAプログラム内で実行することができます。
例えばVBA内に「HTTP REQUEST」を記述してパラメータを設定し、Web APIが実装されている外部サイト・サービスに対して連携のリクエストを送信する。リクエストが認証されるとAPIを通じてデータ連携が行われ、外部サイトやサービスが提供する機能をローカルで活用できるようになります。

手作業の記録と編集、自動化

VBAではExcelに搭載されている「マクロ記録機能」で記録した手作業の内容を編集することもできます。マクロ記録で保存されたマクロをVBEで開き、VBAを使ったコーディングで処理内容を編集することで、繰り返し実行させたり、処理内容を高度化させたりとブラッシュアップすることが可能です。こうすることで、やや複雑な手作業でも比較的簡単に自動化を進められます。

VBAができないこと

万能に見えるVBAも、以下のようなことはできないことがあります。ここでは具体例を4つ紹介します。


  • ・膨大な量のデータ処理

    ・サポート外アプリケーション群との連携処理

    ・文字イメージ認識

    ・アプリケーションの開発


それぞれ詳しく見ていきましょう。

膨大な量のデータ処理

VBA の効果が及ぶのは、Excelワークシートの最大容量(1,048,576 行×16,384 列)までです。ワークシートの最大容量を超えるようなビッグデータを操作する処理はできません。

サポート外アプリケーション群との連携処理

VBAは、原則としてVBAの命令を受け取ることができる製品・機能でのみ動作します。VBAを使用してサポート外アプリケーションのGUIを操作し、オフィス製品と連携させることはできるものの、あまり効率的な仕組みとはいえません。もしオフィス製品を含む複数のアプリケーションを横断的に操作・連携させたいのであれば、RPAなどを活用すべきでしょう。

文字イメージ認識

VBAは画像認識ライブラリなどを持たないため、特定の文字列をイメージとして認識するような処理は苦手とします。ただしOCRと連携することで、取り込んだ画像から文字イメージを認識することか可能です。VBAで利用可能なOCRとしては、「Google Cloud Vision API」や「Google tesseract-ocr」などがおすすめです。

アプリケーションの開発

VBAとはExcelなどの機能を拡張する目的で開発されたため、アプリケーション自体を開発するプログラミング言語ではありません。VBAを駆使すると小規模アプリケーションであれば開発も可能ですが、開発にはある程度の容量を制御する機能が求められる、デザイン性に優れたものを開発するには不向きといった特徴から、開発を目的には利用できないことを頭に入れておきましょう。

Excelマクロでできること・できないこと

VBAでできること・できないことを確認したところで、ここからはExcelマクロについて確認していきましょう。Excelのマクロ記録を使用する場合は、VBAに比べてできることが限られます。

Excelマクロでできること

前述の通り、ExcelマクロでできることはVBAと比べて少ないです。ここではExcelマクロで実現できる具体例を3つ紹介します。


  • ・相対参照、または絶対参照による位置の記録

    ・どのセル、シートでも使用できるルーチンワークの記録

    ・特定の位置でのみ動作する処理の記録


それぞれ詳しく見ていきましょう。

相対参照、または絶対参照による位置の記録

マクロ記録機能では、記録開始時にカーソルがある(選択されている)セルの場所を記憶し、そこを起点として手入力の作業を記録していきます。また、セルを移動すると移動したあとの位置情報が記録されます。このように「セルの位置を記録」しながら手入力を模倣できることがExcelマクロの特徴です。また、セルの位置を記録する方法としては「絶対参照」と「相対参照」があります。

絶対参照とはセルの位置を「絶対値」として捉える方法です。例えばA1からC3へとカーソルを移動させる処理を記録した場合は、どのセルを選択した状態でもA1セルとC3セルのあいだでマクロが動作します。

一方、相対参照はセルの場所を「相対的な位置(範囲)」として記録します。前述の例で言えばA1からC3への移動を「右に2つ、下に2つ動く」という情報として記録するわけです。相対参照で作成したマクロを実行すると、マクロ実行時に選択したセルから処理が始まり、右に2つ・下に2つカーソルを移動させながら動作します。

どのセル、シートでも使用できるルーチンワークの記録

相対参照で作成したExcelマクロであれば、セルに依存せず動作します。セルやシートに関わらず「一定範囲内の書式を規定値に変更する」「選択したセル、シートの内容を一括で削除する」といったルーチンワークをクリック一つで実行できるようにします。

特定の位置でのみで動作する処理の記録

絶対参照を使用したマクロでは、特定のセルのみで動く処理を記録できます。また、シートやブックを移動せずにマクロ記憶を行うことで、特定のシート・ブックのみで動作するマクロが作成可能です。

Excelマクロができないこと

ここからはExcelマクロでは実現が難しい具体例を4つご紹介します。


  • ・繰り返し処理の自動化

    ・条件分岐

    ・マウス操作の記録

    ・そのほか、VBAでできないこと


それぞれ詳しく見ていきましょう。

繰り返し処理の自動化

マクロ記録で作成したExcelマクロでは、2回以上の繰り返し処理を実装できません。もし繰り返し処理を行いたい場合は、VBAによる編集が必要です。

条件分岐

マクロ記録単体では、「特定の条件によって処理を分岐させる」こともできません。また、変数を活用して汎用性を高めることも不可能です。こうした処理は全てVBAによって追加します。

マウス操作の記録

Excelマクロで記録される位置情報は、あくまでも「セル」をベースとしています。したがって、「マウス自体が動いた距離」を記録することはできません。もし「マウスを下に15センチ、右に10センチ動かす」といった動作を記録したいのであれば、その距離に相当するセル位置を記録させるか、他のツールを使用することになるでしょう。

VBAでできないこと

「VBA=マクロ」ではありませんが、保存したExcelマクロをエディターで開くと、実際の中身はVBAとして記録されています。したがって、VBAでできないことはマクロでもできないと考えておきましょう。

【入門編】VBAとマクロの始め方

ここからは、VBAとマクロの始め方をご紹介します。こちらの執筆にあたって使用している環境は以下の通りです。

製品名:Microsoft 365
バージョン番号: 2301
ビルド: 16.0.16026.20196) 64 ビット

ExcelVBAの始め方

Excel VBAは以下の手順で始められます。


  • 1.開発タブを表示

    2.開発タブからVisualBasicを選択しVBEを起動

    3.モジュールを作成

    4.VBAを記述


それぞれの工程を詳しく見ていきましょう。

開発タブを表示

Excelの初期設定では開発タブが表示されていません。そのため、まずは開発タブを表示しましょう。ヘッダーメニューの「ファイル」をクリック後、画面左下の「オプション」をクリックしましょう。

開いたウィンドウの左メニューから「リボンのユーザー設定」を選択し「開発」にチェックを入れることで開発タブが表示されます。

ss="article__subTtl">開発タブからVisualBasicを選択しVBEを起動

Excelを確認するとヘッダーメニューに開発が追加されていますので、早速クリックしてみましょう。開発メニューを開くと一番右側に「Visual Basic」と記載されている箇所があるのでクリックし、VBEと呼ばれる別タブを開きます。

モジュールを作成

開いたVBAのヘッダーメニュー「挿入>標準モジュール」をクリックすることでVBAのコードエディタが開きます。

VBAを記述

作成したモジュールに任意のVBAを記述、「ツール>マクロ」をクリックして開いたウィンドウを開きます。

「マクロの実行」をクリックすることでVBAを実行できます。

Excelマクロの始め方

VBAの使い方を確認したところで、ここからはマクロの使い方を確認しましょう。マクロは以下の手順で始められます。


  • 1.マクロの記録を作成

    2.マクロ名を名付けて保存

    3.保存したマクロを実行

マクロの記録を作成

まずは保存した作業をマクロとして記録します。表示タブ右側にある「マクロ>マクロの記録」をクリックします。

マクロ名や説明を記載し「OK」をクリックすると、手順の記録が始まります。

登録したい操作を手動で行う

記録が始まったら登録した操作を手動で行います。


全ての手順を問題無く行えたら「マクロ>記録終了」をクリックし記録を停止しましょう。

保存したマクロを実行

保存したマクロは「マクロ>マクロの表示」から確認できます。

ExcelVBAの基本コード

ここからはExcel VBAを作成する上で欠かせない基本コードをご紹介します。VBAでは以下でご紹介する基本コードを組み合わせて自動化を行います。紹介する基本コードは以下の5つです。


  • ・サブルーチンの作成

    ・変数の定義

    ・オブジェクトの定義

    ・条件分岐

    ・繰り返し


それぞれ詳しく見ていきましょう。

サブルーチンの作成

サブルーチンとは、VBAのメインルーチンから呼ばれる処理のまとまりです。多言語では関数と呼ばれています。VBAでは以下のように記述します。

Sub サブルーチン名()
実行するコード
End Sub


サブルーチンは複数箇所で同じ処理を行う際に便利です。

変数の定義

変数とは、数値や文字列を格納する容器です。一時的に値を保存する、数値の四則演算を行う際などに使用されます。VBAでは以下のように記述します。

Dim 変数名 As データ型


データ型は真偽(True/False)を格納するBoolean、整数を格納するInteger、文字列を格納するString、データ型を問わず格納できるVariantなどがあり、型で指定した値以外は格納できません。

オブジェクトの定義

オブジェクトとは構造を持った要素です。VBAでは主にExcel上の値を操作します。そこで操作をする対象を指定するために、ブック>シート>レンジ>セルといった構造を持った要素を操作します。VBAでは以下のように記述します。

Dim オブジェクト名 As オブジェクト型


記述方法は変数と同じです。主なオブジェクト型はブック(Excelファイル)を指定するBook、セル・行・列を含む範囲を指定するRange、1つのセルを指定するCellなどがあり、データ型と同様に型で指定した値以外は格納できません。

条件分岐

セルや変数の値に応じて処理を変更したい場合は、条件分岐を活用します。これはExcel関数のIFやIFSと同様の考え方です。VBAでは以下のように記述します。

If 条件 Then
条件が真の場合に実行されるコード
ElseIf 条件 Then
ElseIfの条件が真の場合に実行されるコード
Else
どの条件にも当てはまらない場合に実行されるコード
End If


条件の例は「変数の値が10以上」「変数の値が”女性”」「Range型の要素が5個以上」など、行いたい処理によって変更します。条件分岐の簡単な例をご紹介します。

Sub Example_If ()
Dim a As Integer
a = 10
If a < 5 Then
MsgBox "aは5より小さいです。"
ElseIf a >= 5 And a < 10 Then
MsgBox "aは5以上10未満です。"
Else
MsgBox "aは10以上です。"
End If
End Sub


上記の例では”a”の値によって表示されるメッセージが異なります。

繰り返し

同じ処理を複数回行う場合は繰り返し処理を活用します。繰り返し処理を活用することで「B列に格納されている要素にrowの値を足す」「1から10の値を順番に表示する」などができます。VBAにおける繰り返し処理の記述方法は複数あります。

「繰り返し」の記述例

Do While 条件式
繰り返し処理
Loop
For 変数 = 初期値 To 終了値 Step 増分値
繰り返し処理
Next 変数

For Each 要素 In 配列またはコレクション
繰り返し処理
Next 要素

VBAとマクロに関するよくある質問

最後にVBAとマクロに関するQ&Aを確認しましょう。

Q1. マクロとVBAの違いは何ですか?

VBAは主にオフィス製品を対象としたプログラミング言語であり、マクロは作業記録・自動化のための機能です。VBAはプログラミングスキルが無いと作成できないのに対して、マクロは手動作業を保存できるため多くの人が活用できます。

Q2. マクロはどのようなときに使いますか?

マクロは以下のような例で使用されます。


  • ・相対参照、または絶対参照による位置の記録

    ・どのセル、シートでも使用できるルーチンワークの記録

    ・特定の位置でのみ動作する処理の記録


VBAと異なり、イレギュラーが発生すると停止してしまうため、同じカラムのシートで同じ作業をする際などに使用されています。

Q3. VBAはどのようなときに使いますか?

VBAはできることの幅が広く、例として以下のような場合に活用できます。


  • ・マクロを作成するとき

    ・文字列操作と変換を行うとき

    ・手作業の記録を編集する、自動化するとき


作業効率を上げる目的で使用し、ミスが防げるのもVBAの持つ特徴です。

関連記事:VBAは転職で有利になる?事務職・エンジニア職のスキルの違いとは

Q4. VBAにはどのような便利機能がありますか?

VBAの便利機能は以下の通りです


  • ・Microsoft Office製品との連携

    ・ファイルのコピーや作成の自動化

    ・外部Excelファイルの値を読み込む


これらの作業はマクロでは実現できません。より実務的な作業を自動化したい際はVBAに挑戦してみましょう。

まとめ

Excelを普段から活用するという人でも、簡単な関数なら扱えるもののVBAを使いマクロ作成ができる人は限られます。少しずつでも活用できると、業務効率化として大きな武器になるでしょう。
他エンジニアとの差別化も図れるため、今からVBAを学ぶのもおすすめです。当記事を参考に、VBAとマクロにぜひ触れてみてください。

ITエンジニアの転職ならレバテックキャリア

レバテックキャリアはIT・Web業界のエンジニア職を専門とする転職エージェントです。最新の技術情報や業界動向に精通しており、現状は転職のご意思がない場合でも、ご相談いただければ客観的な市場価値や市場動向をお伝えし、あなたの「選択肢」を広げるお手伝いをいたします。

「将来に向けた漠然とした不安がある」「特定のエンジニア職に興味がある」など、ご自身のキャリアに何らかの悩みを抱えている方は、ぜひ無料のオンライン個別相談会にお申し込みください。業界知識が豊富なキャリアアドバイザーが、一対一でさまざまなご質問に対応させていただきます。

「個別相談会」に申し込む

転職支援サービスに申し込む
※転職活動を強制することはございません。

レバテックキャリアのサービスについて

この記事の監修

レバテックキャリア編集部

レバテックキャリアは、IT/Web業界のエンジニア・クリエイター向けに特化した転職エージェントです。当メディアでは、エンジニア・クリエイターの転職に役立つノウハウから、日々のスキルアップや業務に活かせる情報まで、幅広いコンテンツを発信しています。

プロのアドバイザーがあなたのお悩みや疑問にお答えします

- 転職個別相談会開催中 -

相談内容を選択してください

※転職活動や求人への応募を強制することはありません

関連する記事

人気の求人特集

内定率が高い

VBAの求人・転職一覧

今もらっている年収は高い?低い?

簡単60秒 エンジニア・クリエイター専門 年収診断 無料診断START ×