【簡単Excelマクロ・VBA】Excelマクロ・VBAの全体像 〜通常使用編〜
いつもありがとうございます。
ノンプログラマー向け「Excelマクロ・VBA解説シリーズ」へようこそ。
Excelマクロ(エクセルマクロ)は、普段の仕事に変化をもたらす可能性のある強力なツールです。Excelマクロでは、以下のようなことができます。
- PCで行っている作業の自動化
「VBA」と「マクロ」は、混同しがちですが、それぞれ以下のものを指します。
- VBA
Visual Basic for Applications の略で、プログラミング言語のこと。 - マクロ
VBAを使って作成される「機能」のこと。
Excelマクロの作成というと、たくさんのことを時間をかけて勉強しなければならないように思うかもしれません。
しかし、職業プログラマーではない一般の会社員や学生が、小規模な自動化ツールを作成するなどの用途であれば、そこまでは必要ありません。
今回の記事では、そのようなノンプログラマーの方が、VBAプログラミングの能力を獲得するための全体像を解説いたします。
ことばの意味
- ノンプログラマー
プログラミングを主な仕事にしていない人たちのことです。
関連記事
VBAの全体像の解説
結局のところ、以下の6つを習得すれば、だいたいのことができるようになります。
以下のセクションでは、上記の各項目の概要を解説していきます。本記事では概要にとどめ、より実践的な具体例と解説は別の記事で紹介していきます。
VBAの全体像の中の各セクションの解説
オブジェクトの取得・指定
まず、「オブジェクト」とは、以下のものを指します。
- VBAで操作する「対象」
VBAでは、操作するオブジェクトを指定して、状態を変更したり、動作を指示したりします。オブジェクトとは、具体的には、Workbook や Worksheet、Range(単一セルまたは複数セル)などのことを指します。
例えば、以下のように記述することができます。この例では、Cells(1, 1)という「オブジェクト」の、Valueという「状態」を「1」に変更しています。
この例で示すように、Workbooks --> Worksheets --> Range と、明示的に上位のオブジェクトから指定しておけば、問題ありません。
Workbooks("your_book.xlsm").Worksheets("sheet1").Cells(1, 1).Value = 1
しかし、以下のように記述すると、どうなるでしょうか。
Cells(1, 1).Value = 1
この例では、上位のオブジェクトを明示的に指定していません。このような場合には、そのときにアクティブになっているオブジェクトが指定されます。
これは、単一のブックしか開いていない場合は良いですが、以下のように複数のブックを開いている場合には、問題になる場合があります。
つまり、意図しないブックが偶然アクティブになっていた場合、そのブックに変更を加えることになってしまいます。
普段の仕事において、終始単一のブックしか操作しないということはめずらしいと思いますし、大量のブックを高速で処理できることがVBAの強みでもありますので、オブジェクトは必ず明示的に指定しておくことが推奨されます。
ことばの意味
- ブック
Excelファイルのことです。
セルの基本操作
マクロを作成するにあたり、セルの操作は何かと必要になります。セルの基本操作には以下のようなものがあります。
- セルへの値の入力
- セルの値を取得
- セルのコピー&ペースト
- セルの内容などのクリア
- フォントの設定
- フォントやセルの色設定
- 文字列、数値、日付、時間、通貨、色、罫線等の書式設定
- セルの結合・解除
- セルの削除・挿入
セルへの値の入力は、1のセクションで示した方法で実現できます。ここでは、例として、セルに入力されている値を取得する方法を解説いたします。
以下のように、Cells(1, 1)に "1" が入力されているとします。
この場合、以下のようなコードでセルの値を取得できます。ここでは例として、Msgbox関数を使用して、メッセージボックスに取得した値を表示します。
"ThisWorkbook" というオブジェクトは、このマクロを記述しているブックそのものを表します。
尚、"関数"とは、特定の処理をまとめたもののことです。入力値を受け取り、それに基づいた結果を出力します。
Sub sample()
MsgBox ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Value
End Sub
上記のコードを実行すると、以下の結果が出力されます。
以上が、セルの値を取得する方法です。
繰り返し処理
マクロで何がしたいかというと、結局、「繰り返し処理」が多いのではないでしょうか。VBAの繰り返し処理には、以下の4つの構文があります。これらの構文を目的に応じて使い分けていく必要があります。
この中でも、For...Nextループは最も基本的であり、使う機会も多いと思います。ここでは、For...Next ループの解説を行います。
For...Next ループの構文は以下の通りです。
For 変数 = 初期値 To 最終値
' 実行するコード
Next 変数
具体的なコードを例示すると、以下のようになります。
Sub sample()
For counter = 1 To 10
'メッセージボックスに変数の値を表示する
MsgBox "現在の変数の値は " & counter & " です。"
Next counter
End Sub
1段落目では、変数 counter を 1から10まで変化させる指示を出しています。尚、"変数"とは、値を入れておく箱のようなものです。
For 文が実行されると、変数は開始値から始まり、3行目のNext文が実行されるたびに1ずつ増加します。
2段落目では、Msgboxという関数を使って、変数 counter の値をメッセージボックスに表示させる指示を出しています。
3段落目では、次の変数の値を次に進める指示を出しています。
これを実行すると、以下のメッセージボックスが表示されます。これが10回繰り返されます。
以上が For...Next ループでの「繰り返し処理」です。
ことばの意味
- 構文
プログラミング言語の文法のことです。 - 配列
複数のデータを格納するための入れ物のことです。 - コレクション
オブジェクトの集合のことです。
条件分岐
Excelマクロで自動処理をしていると、条件によって処理の内容を変えたい場合が多々あります。実際のExcelマクロにおいて、条件分岐が無いコードは、ほとんどないといってもよいでしょう。
VBAの条件分岐には以下の2つの方法があります。
- If...Then...Else ステートメント
- Select Case ステートメント
どちらのステートメントも、条件が満たされた場合(Trueの場合)と、それ以外とで異なる処理を実装することができますが、コードの読みやすさや直感的な記述といった観点から、If...Then...Else は条件が少ない場合、Select Case は条件が多い場合に適しています。
尚、ステートメントとは、VBAの中で何らかの固有の働きをすることを定義したものです。
それぞれ以下のような構文で使用します。
- If...Then...Else
If 条件1 Then
' 条件1を満たす場合(Trueの場合)に実行するコード
ElseIf 条件2 Then
' 条件2を満たす場合(Trueの場合)に実行するコード
Else
' いずれの条件も満たさない場合(Falseの場合)に実行するコード
End If
- Select Case
Select Case 変数
Case 条件1
' 条件1を満たす場合実行するコード
Case 条件2
' 条件2を満たす場合に実行するコード
Case Else
' いすれの条件も満たさない場合(Falseの場合)に実行するコード
End Select
ファイル操作
ここまで紹介してきたようなセルの操作や、繰り返し処理、条件分岐などの処理をしたいとき、マクロを記述していくブック内に処理したいすべてのデータがあることは、実際には稀だと思います。
他のファイルからデータを読み込み、条件に合致するデータのみに何らかの処理を施し、その内容を新しいファイルに書き込む、そのような使い方がほとんだと思います。
つまり、ファイル操作ができなければ、マクロの真の効果を発揮できないと言ってもよいでしょう。
ファイルの操作には以下のようなものがあります。
- ファイルの作成
- ファイルを開く
- ファイルを閉じる
- 他のファイルからデータを取得
- ファイルへデータを書き込み
- ファイルのコピー
- ファイルの移動
- ファイル名の変更
- ファイルの削除
- ファイル・フォルダの存在チェック
ここでは例として「ファイルを開く」操作を解説します。ファイルを開く処理は、以下のように記述します。
Sub sample()
' 変数の宣言
Dim file_path As String
Dim wb As Workbook
' ファイルのパスを指定
file_path = "your_directory\your_book.xlsx"
' ファイルを開く
Set wb = Workbooks.Open(file_path)
End Sub
1段落ずつ解説していきます。
' 変数の宣言
Dim file_path As String
Dim wb As Workbook
この1段落目では、変数を宣言しています。VBAにおいて変数の宣言は必須ではありませんが、コードの可読性の向上やエラー防止に役立ちます。
' ファイルのパスを指定
file_path = "your_directory\your_book.xlsx"
2段落目では、変数にファイルパスを代入しています。
' ファイルを開く
Set wb = Workbooks.Open(file_path)
3段落目では、Workbooks というオブジェクトに Open というメソッドを使って指定したファイルを開いています。尚、"メソッド"とは、オブジェクトを操作するための命令文のことです。
この3段落目では、ファイルを開くと同時に、Set ステートメントを使って、「開いたファイル」をオブジェクト変数 wb として取得しています。
このようにしておくと、このwb は、その後のコードで「開いたファイル」を参照して操作を加えたいときに使うことができるようになります。
実際のコードでは、ファイルを開くことと、それをオブジェクト変数として取得することは、セットといってもよいでしょう。
以上が、「ファイルを開く」操作です。
Excelオブジェクトの操作
ユーザーとコミュニケーションをとるための「メッセージボックス」、データを見やすくするための「グラフ」、ユーザーインターフェースとなる「ユーザーフォーム」、図解に用いる「図形」などが、Excelオブジェクトです。
Excelマクロを作成していると、さまざまなExcelオブジェクトの操作が必要になることがあります。
Excelオブジェクトには以下のようなものがあります。
- メッセージボックス
- インプットボックス
- グラフ
- 図形
- ユーザーフォーム
- プログレスバー
具体例と解説は、別の記事で解説していきます。
おわりに
ご覧いただきありがとうございました。
本稿では、ノンプログラマーの方向けに、Excelマクロ・VBAの全体像を解説いたしました。
本稿で紹介した6つの項目についての、より実践的な具体例と解説については、別の記事でご紹介していきます。
筆者の記事関連経験
- VBA使用経験約20年
実務に使用するマクロを多数作成してきました。 - Python 3 エンジニア認定基礎試験
経済産業省が定めたガイドライン「ITスキル標準(ITSS)」に掲載されている民間資格です。
VBAプログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。
VBAプログラミングのスキルアップ
学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。
入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。
甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/
VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。