VBAとは
VBAは、「Visual Basic for Applications」の略語で、ExcelやPowerPointといったMicrosoft Officeのアプリケーションの機能を、拡張することができるプログラミング言語のことです。名前が似ているものに、Microsoftが開発したプログラミング言語であるVB(「Visual Basic」の略語)があります。VBはWindows関連の開発に活用されるプログラミング言語および開発環境であり、このVBをベースにして作られたのがVBAです。VBAはあくまでExcelなどのアプリケーション内で使用できる専用のプログラミング言語です。逆を言えば、開発環境を構築する必要があるVBに対して、Officeのアプリケーションがあればそれだけで使用できるのがVBAです。Officeのユーザーは、VBAを用いてプログラムを記述することにより、アプリケーション上での定型作業や複雑な処理を自動的に実行することができます。

マクロとは
マクロは、アプリケーションソフトであらかじめ操作手順を設定しておくことによって、必要なときに簡単に実行させることができる機能のことです。その中でもExcelのマクロ機能を指して使われる場合が多く、ここでもExcelのマクロとして紹介します。Excelの機能のひとつですから、「関数」や「テーブル」、「フィルター」といったものと同列と考えて良いでしょう。また、マクロを使うにはプログラミング言語が必要になりますが、Excelには「マクロの記録」という便利な機能が用意されています。これは、実際にExcel上で行った操作を覚えさせることができるものです。この「マクロの記録」を使うことで、プログラミング言語の文法などを細かく覚えることなく、簡単にExcel上の作業を自動化することができます。

VBAとマクロの違い
上で述べたとおり、VBAはプログラミング言語であるのに対して、マクロは機能です。マクロを作成するためには、アプリケーションごとに異なるプログラミング言語を用います。そしてOfficeアプリケーションであるExcelのマクロ機能を使うために、必要になるプログラミング言語というのがVBAなのです。そのため両者は同じものとして混同される場合が多くありますが、厳密には異なるものです。
また、前項で「マクロの記録」について紹介しましたが、これがあればVBAは必要ないと思われるかもしれません。しかし、「マクロの記録」はVBAでプログラミングされており、あくまでユーザーが手書きすることなく、簡単にマクロ機能を使えるというだけです。また、実際には「マクロの記録」でできる内容には限界があります。より複雑な処理を細かく制御するためには、VBAを使ってコードを手書きし、マクロを作成する必要があります。
なお、VBAのコードを手書きする際に使う編集エディターは、VBEと呼ばれるものです。VBEは「Visual Basic Editor」の略語です。名前が似ているため、こちらにも注意しましょう。

VBAでできること・できないこと
では、ここからはVBAで「できること」「できないこと」を紹介します。なお、一般的な用途に合わせて、主にExcel上でのVBAの使い方を中心にしています。

VBAでできること
Microsoftアプリケーション用のプログラミング言語とは言え、VBAを使いこなすことができれば、簡単な業務システムをVBAだけで実装することもできるので、さまざまな業務の効率化が図れます。下記はその一例です。

VBAでできること1:データ集計の自動化
自社の売上をExcelで管理している場合、VBAを使うことで、その売上データを顧客別や商品別などに並び替えて、集計することができます。

VBAでできること2:メールの一括送信
メールマガジンや日報、月報など、定期的に送るもので、フォーマットが決まっているメールであれば、VBAを使って、メールを自動的に作成して一斉に送信することができます。

VBAでできること3:アプリケーションの連携
VBAを使えば、ExcelやPowerPoint、AccessといったMicrosoft Officeのアプリケーション同士を連携することできます。例えば、Accessで管理しているデータから売上金額を読み込み、Excelでグラフ化するといったことが可能です。

VBAでできないこと
上記のように、さまざまなことができるVBAですが、VBAでも対応しきれないこともあります。

VBAでできないこと1:膨大なデータ処理を伴う作業
VBAを使ってデータを集計したり、帳票を自動で起こしたりといったことはできるものの、処理能力はそれほど高くないため、数万レベルの膨大なデータを処理しようとすると、どうしても時間がかかってしまいます。また、処理しきれずにフリーズしてしまう可能性もあります。

VBAでできないこと2:Office以外のアプリケーションとの連携
VBAは、Officeアプリケーションで使えるプログラミング言語です。そのため、VBAで書かれたプログラムを認識できない、他社のアプリケーションとの連携はできません。

VBAでできないこと3:アプリケーションの開発
もともとVBAはExcelなどの機能を拡張するもので、アプリケーション自体を開発するプログラミング言語ではありません。VBAを駆使してアプリケーションを開発することは、できなくはないのですが、デザイン性に優れたものなどを開発するには不向きだと言えます。

Excelマクロでできること・できないこと
次に、VBAを使わずにExcelマクロで何ができるかを紹介します。この場合には、「マクロの記録」機能を使用するのですが、VBAに比べるとできる範囲が狭くなります。

Excelマクロでできること
「マクロの記録」は、Excel上で行った手作業を記録しておき、それを再現することができます。データの並び替えや抽出、集計などができるのですが、ここでは「マクロの記録」が何をしているかを踏まえて紹介します。

Excelマクロでできること1:位置の記録
「マクロの記録」では、まず記録を開始したとき選択されているセルの場所を記憶します。そこからセルを移動すると、移動後の位置情報を記録していきます。このように、セルの位置を一つひとつ記録しながら、Excel上での一連の手作業を記録しています。
位置を記録する方法としては、「絶対参照」「相対参照」の2つがあります。絶対参照は、「B2のセルからD5に移動」という記録の仕方で、相対参照は「列を右に2、行を下に3移動」という記録の仕方です。なお、デフォルトでは絶対参照で記録されるのですが、相対参照に変更することもできます。

Excelマクロでできること2:特定の位置だけで動く処理の記録
上記のとおり、絶対参照では特定のセルのみで動く処理を記録することできます。シートの移動なしで「マクロの記録」を実行すれば、特定のシートの特定の位置だけで動作するマクロを作成できます。

Excelマクロでできること3:定型作業の記録
上の例とは逆に、相対参照で記録すれば、セルやシートに関係なく「一定範囲内のデータを抽出して、別のシートに転記する」といった作業を記録することができます。これにより任意のセルを起点にデータを転記するというような、定型作業のマクロを作成することができます。

Excelマクロでできないこと
手軽に使えて便利な「マクロの記録」ですが、いくつかの限界があります。下記はその一例です。

Excelマクロでできないこと1:ループ処理の記録
ループ処理とは、特定の条件を満たすまで同じ処理を繰り返すことです。こういった作業を「マクロの記録」では記録することはできません。ループ処理を行いたい場合には、VBAでコードを編集する必要があります。

Excelマクロでできないこと2:条件分岐
「マクロの記録」は、作業をそのまま記録しているため、自分で判断するような作業は再現できません。そのため、「もし、空白セルがあれば処理を実行しない」というような、特定の条件によって処理を分けることはできないのです。

Excelマクロでできないこと3:VBAでできないこと
「マクロの記録」はあくまでVBAを使えない人でも簡単に操作を記録できる機能です。記録した内容はVBAでコードが記述されて、マクロとして作成されています。それゆえ、VBAでできないことは、当然「マクロの記録」でもできません。