Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説

ほぼすべてのMicrosoft Office製品で動作するVBA(Visual Basic for Applications)は、Office製品の活用範囲を大きく広げられる、最も強力なツールのひとつです。

この初心者向けVBAガイドでは、Officeアプリケーションに「開発」タブを追加する方法、VBAエディター画面の開き方、そして基本的なVBAステートメントやループの仕組みを解説します。読み終える頃には、Excel・Word・PowerPoint・Outlook・OneNoteでVBAを使い始められるようになっているはずです。

【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説

本ガイドは最新バージョンのMicrosoft Office製品を前提としています。旧バージョンをお使いの場合、スクリーンショットと表示が多少異なることがありますのでご了承ください。

開発タブの有効化とVBAエディターの使い方

本ガイドで扱うOffice製品では、「開発」タブが初期状態では表示されていないことに気づくでしょう。開発タブはExcel・Word・Outlook・PowerPointでのみ利用可能です。OneNoteにはアプリ内でVBAコードを編集するツールが用意されていませんが、他のOfficeプログラムからOneNote APIを参照して操作することは可能です。

この方法については、今後公開予定の上級者向けVBAガイドで詳しく紹介します。

  • 任意のOffice製品で開発タブを有効にするには、「ファイル」メニューを選択し、左側のナビゲーションから「オプション」を選択します。
  • オプションのダイアログが表示されたら、左側のメニューから「リボンのユーザー設定」を選択します。
【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説

左側のリストには、そのOfficeアプリケーションで利用できるすべてのコマンドが表示され、右側のリストには現在リボンに表示されている(有効化されている)項目が表示されます。

  • 右側のリストに「開発」が表示されているはずですが、チェックが入っていません。チェックボックスにチェックを入れるだけで、開発タブが有効になります。
【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説
  • 右側に「開発」が見つからない場合は、左側の「コマンドの選択」ドロップダウンを「すべてのコマンド」に変更します。一覧から「開発」を見つけて、中央の「追加>>」を選択してリボンに追加しましょう。
  • 完了したら「OK」を選択します。
  • 開発タブが有効になったら、アプリケーションのメインウィンドウに戻り、上部メニューから「開発」を選択します。
  • 次に、リボンの「コントロール」グループにある「コードの表示」を選択すると、VBAエディター画面が開きます。
【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説
  • VBAエディターが開いたら、ここに後のセクションで学ぶコードを入力できます。
【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説
  • まずは普段使っているいくつかのOfficeアプリケーションに開発タブを追加してみましょう。VBAエディターを開く操作に慣れたら、このガイドの次のセクションへ進んでください。

初心者のためのVBAプログラミングの基本ポイント

VBAエディターを開くと、左側パネルのナビゲーション表示がOfficeアプリケーションによって異なることに気づくでしょう。

【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説

これは、VBAコードを配置できるオブジェクトが、アプリケーション内に存在するオブジェクトの種類によって異なるためです。たとえばExcelでは、ブックやシートのオブジェクトにVBAコードを追加できます。Wordではドキュメントに対して、PowerPointではモジュールに対してのみコードを追加できます。

そのため、メニュー構成の違いに戸惑う必要はありません。VBAコードの構造と構文は、どのアプリケーションでも共通です。異なるのは参照できるオブジェクトと、それらのオブジェクトに対してVBAコード経由で実行できるアクションだけです。

さまざまなオブジェクトやアクションの詳細に入る前に、まずVBAコードを書く際に最もよく使われる基本的な構造と構文を見ていきましょう。

VBAコードを記述する場所

VBAエディターでは、編集ウィンドウ上部にある2つのドロップダウンボックスを使って、コードをどのオブジェクトに関連付けるか、そしていつコードを実行するかを指定します。

たとえばExcelで「Worksheet」と「Activate」を選択した場合、ワークシートが開かれるたびにコードが実行されます。

【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説

その他にも、ワークシートの内容が変更されたとき、閉じられた(非アクティブ化された)とき、計算が実行されたときなど、さまざまなイベントをトリガーとしてVBAコードを実行できます。

VBAエディターにコードを追加する際は、必ず目的のオブジェクトに、正しいイベント(アクション)を指定してコードを配置するようにしましょう。

VBAのIFステートメント(条件分岐)

IFステートメントは、VBAでも他のプログラミング言語と同じように動作します。

IFステートメントの最初の部分では、条件(または複数の条件)が真であるかどうかを判定します。複数の条件はAND演算子やOR演算子で連結できます。

たとえば、スプレッドシート上の点数が合格点より上か下かを判定し、別のセルに「Pass(合格)」「Fail(不合格)」のステータスを代入するといった処理が考えられます。

If Cells(2, 2) > 75 Then Cells(2, 3) = "Pass" Else Cells(2, 3) = "Fail"

ステートメント全体を1行に収めたくなければ、行末に「_」(アンダースコア)を付けることで、複数行に分割できます。

If Cells(2, 2) > 75 Then _
Cells(2, 3) = "Pass" Else _
Cells(2, 3) = "Fail"

このテクニックを使うと、コードが格段に読みやすくなり、デバッグもしやすくなります。

VBAのFor Nextループ

IFステートメントは、上の例のように単一のセルを比較するような単発の処理に適しています。しかし、セル範囲全体を順番に処理して、それぞれに同じIF判定を行いたい場合はどうすればよいでしょうか。

そんなときに必要になるのがFORループです。

これを行うには、範囲の長さを取得し、データが含まれる行数だけループを回します。

具体的には、範囲とセルの変数を定義してループ処理を行います。また、結果を出力する適切な行を指定できるよう、カウンター変数も定義しておきましょう。まず、VBAコードの先頭に次の行を記述します。

Dim rng As Range, cell As Range
Dim rowCounter as Integer

続いて、範囲のサイズを次のように定義します。

Set rng = Range("B2:B7")
rowCounter = 2

最後に、FORループを作成して、範囲内のすべてのセルを順に処理し、比較を行います。

For Each cell In rng
   If cell.Value > 75 Then _
   Cells(rowCounter, 3) = "Pass" Else _
   Cells(rowCounter, 3) = "Fail"

   rowCounter = rowCounter + 1

Next cell

このVBAスクリプトを実行すると、実際のスプレッドシート上に結果が表示されます。

【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説

VBAのWhileループ

WhileループもFORループと同様に一連のステートメントを繰り返し実行しますが、ループを継続する条件が「条件が真である間」という点が異なります。

たとえば、上記のFORループと同じ処理を、rowCounter変数を使ってWHILEループとして書き直すことができます。

While rowCounter < rng.Count + 2
   If Cells(rowCounter, 2) > 75 Then _
   Cells(rowCounter, 3) = "Pass" Else _
   Cells(rowCounter, 3) = "Fail"
   rowCounter = rowCounter + 1
Wend

注:終了条件を rng.Count + 2 とする必要があるのは、行カウンターが2から始まり、データが終わる7行目で終了する必要があるためです。ただし、範囲(B2:B7)のカウントは6しかなく、Whileループはカウンターが終了値より大きくなったときにのみ終了するため、最後のrowCounterの値は8(つまりrng.Count + 2)である必要があります。

Whileループは次のように設定することもできます。

While rowCounter <= rng.Count + 1

この場合、範囲のカウント(6)に1を足すだけで済みます。rowCounter変数がデータの末尾(7行目)に達した時点でループを終了できるからです。

VBAのDo WhileループとDo Untilループ

Do WhileループとDo UntilループはWhileループとほぼ同じですが、動作が少し異なります。

  • Whileループ:ループの開始時に条件が真かどうかを判定します。
  • Do-Whileループ:ループ内のステートメントを実行した後に、条件が真かどうかを判定します。
  • Do-Untilループ:ループ実行後に、条件がまだ偽であるかどうかを判定します。

この場合、上記のWhileループは次のようにDo-Whileループとして書き直せます。

Do
   If Cells(rowCounter, 2) > 75 Then _
   Cells(rowCounter, 3) = "Pass" Else _
   Cells(rowCounter, 3) = "Fail"
   
   rowCounter = rowCounter + 1
Loop While rowCounter < rng.Count + 2

この場合、ロジック自体はあまり変わりませんが、すべてのステートメントを確実に少なくとも1回は実行させてから条件判定を行いたい場合は、Do-WhileまたはDo-Untilループが適しています。

VBAのSelect Caseステートメント

VBAコードを構造化するために理解しておくべき最後の論理ステートメントがSelect Caseです。

上記の例で、単なる合否判定ではなく、AからFまでの成績評価を割り当てたいとしましょう。

これは次のようなSelect Caseステートメントで実現できます。

For Each cell In rng
   
   Select Case cell

   Case 95 To 100
      Cells(rowCounter, 3) = "A"
   Case 85 To 94
      Cells(rowCounter, 3) = "B"
   Case 75 To 84
      Cells(rowCounter, 3) = "C"
   Case 65 To 74
      Cells(rowCounter, 3) = "D"
   Case 0 To 64
      Cells(rowCounter, 3) = "F"
   End Select

   rowCounter = rowCounter + 1

Next cell

このVBAスクリプト実行後のスプレッドシートは、以下のようになります。

【初心者向け】VBA入門ガイド:開発タブの有効化から基本構文まで徹底解説

これで、Microsoft OfficeアプリケーションでVBAを使い始めるために必要な基礎知識はすべて身につきました。ぜひ実際にコードを書いて試しながら、日々の業務の自動化に役立ててください。

  1. 初心者向けCheat Engine(チートエンジン)徹底解説|インストールからBlueStacksでの使い方まで

    Cheat Engine(チートエンジン)は、Windows向けのゲーム改造ツールとして最も有名なものの一つです。メモリをスキャンし、デバッガー機能を利用してゲーム内の数値(HP・所持金・スコアなど)を自由に書き換えることで、ゲームの制限を回避したり、単純に楽しんだりするために、世界中のゲーマーに愛用されています。非常に強力なツールである反面、インターフェースは初心者にはやや取っ付きにくく、ある程度の操作慣れが必要です。そこで本記事では、初めての方でも迷わず使えるよう、Cheat Engineの基本的な使い方をステップごとに丁寧に解説します。ただし、始める前に押さえておきたい重要なポイントがあ

  2. 今すぐ導入したいおすすめOutlookアドイン5選

    アドイン(拡張機能)は、日々の業務を効率化してくれる便利なツールです。現代のビジネスパーソンの多くが、少なくとも1つはアドインを日常的に活用しているのではないでしょうか。 Outlookユーザーであれば朗報です。Outlookは多彩なアドインに対応しており、ダウンロードするだけで生産性を大幅に向上させられます。本記事では、特におすすめのOutlookアドインを5つ厳選してご紹介します。 1. Boomerang Boomerangは無料で使えるOutlookアドインです。メールの送信を指定した日時に予約したり、会議のスケジュール調整を行ったり、返信のないメールへのフォローアップリマインダーを