【VBA基礎①】始め方から基本操作まで

皆さんはVBAについて知っていますか?VBA(Visual Basic for Applications)は、Microsoft Officeアプリケーションを自動化するためのプログラミング言語です。このシリーズ記事はVBAを基礎からできるだけ分かりやすくまとめているので、初めから読んでいけばVBAの全体像を理解し、実務などでVBAを使えるようになりますよ!

この記事はこんな人におすすめ!

・とりあえずVBAとはどのようなものか知りたい人
・VBAを使用して日々の業務を効率化させたい人

この記事はVBAの基礎シリーズです。他の記事は以下のリンクからご覧いただけます!

VBAとはなにか

VBAとは Visual Basic for Applications の略で、Microsoftが開発したプログラミング言語です。VBAによってExcelだけでなくPowerPoint、WordなどのMicrosoftアプリの自動化や機能を拡張することができます。

VBAとマクロの違い

VBAを調べていると、「マクロ」という言葉をよく耳にしませんか?これらの言葉は意味を混同して話されがちですが、まったくの別物です。今後よく出てくる言葉なので意味を理解しておきましょう。

VBA

先ほども述べた通り、VBAとはプログラミング言語の一種です。プログラミング言語とはコンピュータに命令を出して動かすための記述形式であり、VBAは主にMicrosoftのアプリを操作するの特化した言語です。

マクロ

マクロとはアプリケーションソフトにおいて、あらかじめ動作手順を設定しておくことで、操作を自動化できる「機能」のことを言います。officeソフトにも専用のマクロがあり、マクロに動作手順を設定するためのツールがVBAにあたります。

VBAでできること

VBAとはどのようなものかを理解したところで、結局VBAを利用してどんなメリットがあるのか、実際どのようなことができるのかが気になるでしょう。以下にVBAでできることをまとめてみました。

極論、ExcelなどのOfficeソフトの動作はVBAによってすべて記述することができます。なので繰り返し作業はその部分の動作をVBAで記述してマクロとして記録することで、いつでも呼び出して実行できるようになります。例えば、「データのある特定の部分を抽出してグラフを作成する作業」や「特定の部分を別ファイルへ転機する作業」など、データ量が少量であればVBAを使用するまでもないですが、大量のデータ整理が必要な場合、一部を自動化するだけで作業時間を圧倒期に短縮することが出来ます。

仕事をしているとだんだんとファイルやフォルダの量が増えていって、データの整理が追いつかなくなるなんてことがありませんか?このような時はVBAを使用することで整理することが出来ます。ファイルの一括移動や不要ファイルの削除、ファイル名の一括変換など面倒なファイル整理を自動化することができます。

Excelにある関数やグラフの作成機能などはVBAでも同様の動作を記述することができます。例えば、「受領したデータ一覧から関数を使用して文字列を結合し、別のセルにまとめる作業」などはVBAによって関数の動作を記述してマクロで使用することで、Excelを使用した事務作業などを自動化することができます。

「Excelで作成した表をPowerPointに張り付けてグラフ化」、「Wordの表をExcel化して編集」などOfficeアプリであれば、VBAを使用してアプリ同士を連携、自動化することができます。

VBAを使用することで、WEB上にあるデータを抽出し、取得することができます。このようにWEBやデータベース上のデータから特定の情報を探して抽出する作業を「スクレイピング」といい、VBAを使用することでスクレイピングを自動化し、Excelにデータを落とし込んで作業するといったことが出来るようになります。

数値計算とは代数や解析的に解くことのできない問題に対して、近似的な答えを得る数学の手法です。よく工学分野で使用されますが、このような工学的な計算のおおよそはVBAでも計算できます。特に膨大なデータを使用して計算を実施しなければならない場合、VBAが有効です。理系の学生で実験系の研究をしている方は大量の実験結果を扱う必要があると思いますので、VBAで作業の効率化ができるかもしれないですね。

VBAの始め方

VBAの概要について理解できたところで、早速実践に入っていきましょう。この記事のシリーズではExcelを使用してVBAの基礎について発信しようと思います。まずはVBAを始めるため事前準備を解説します。

Excelを開いたら上部のリボンから「ファイル」を選択、表示画面の「オプション」をクリックします。

オプション画面の「リボンのユーザー設定」から「開発」タブにチェックします。そうすると、上部のリボンに「開発」タブが表示されます。

外部からダウンロードしたExcelファイルなどにコンピュータに害を及ぼす可能性のあるマクロが組まれていることがありあます。以下の設定をすることで、マクロを持ったExcelファイルを表示した際に、ユーザー自らがマクロの有効化を選択できるようにします。まず、「開発」タブの「マクロのセキュリティ」をクリック。

マクロのセキュリティを表示したら「マクロの設定」から「警告して、VBAマクロを無効にする」を選択してOKをします。ファイルのマクロが安全かどうか見極めるようになるまではこの設定にしておくと良いでしょう。

通常のExcelファイルの拡張子は「.xlsx」ですが、マクロを含むExcelファイルは「.xlsm」になります。VBAを記述して保存するときはマクロを有効の形式で保存しましょう。ファイルから「名前を付けて保存」をクリックし、「マクロ有効ブック」の形式を選択して保存します。

VBAの画面構成

事前準備が終了したら次はVBAを操作していきましょう。まずはリボンの「開発」タブから「Visual Basic」を選択し、VBAの操作画面を開きます。

VBAの操作画面は大きく分けて3つあります。

プロジェクトウィンドウ
プロジェクトウィンドウは記載したコードを管理するフォルダのようなものです。デフォルトではExcelブックやその中にあるシートが表示されます。のちほど説明しますが標準モジュールを挿入すると、プロジェクトウィンドウに新しく表示されます。

プロパティウィンドウ】
プロパティウィンドウにはモジュールなどに関する情報を表示します。

【コードウィンドウ】
コードウィンドウは実際にVBAを記述するウィンドウです。モジュールごとに別のコードウィンドウが表示されます。

VBAのプロジェクト構成

VBAのプロジェクト⇒モジュール⇒プロシージャ⇒ステートメントの順に階層構造になっています。

【プロジェクト】
プロジェクトの中には複数のモジュールを作成できます。

【モジュール】
モジュールは複数のプロシージャを作成して保管するフォルダのようなものと理解しておけば良いです。デフォルトの状態では「ブックモジュール」と「シートモジュール」が作成されています。これらはブックもしくはシート全体に操作を行いたい時に使用するモジュールです。例えば、「シートを開いたとき」や「ブックを保存したとき」になにかの処理をしたい場合、ここにコードを書き込みます。「標準モジュール」はデフォルトでは作成されていないので、上部の「挿入」タブから新たに挿入することができます。基本的にVBAで使用するのは標準モジュールです。その他にも「フォームモジュール」や「クラスモジュール」がありますが、これらはまた後の記事で紹介したいと思います。

【プロシージャ】
プロシージャは1つのコードのまとまりです。モジュール内に複数のプロシージャを作成できます。画面の「Sub test1()」から「End Sub」までがひとつのプロシージャです。

【ステートメント】
ステートメントはマクロを動かすためにプロシージャ内に記述する命令文です。

VBAの基礎

次は実際に標準モジュールを作成し、コードを記述してみましょう。

「挿入」タブの「標準モジュール」をクリックし、新しくモジュールを作成します。

モジュールを作成したら、まず「option explicit」と入力します。これは後に説明するVBA上での変数宣言を強制するものです。VBAでは変数を宣言しないと不具合が生じてしまいます。「option explicit」はそれを未然に防ぐためのコードです。これを記述しておくと、エラーが発生した際に、エラー個所とその原因が明確になります。

変数とは値を代入するための箱です。変数を使用するには、事前に変数の型を宣言しなければなりません。例えば、「x」という変数に数字を代入したいときは「x」に数字を取り扱えるような変数の型を宣言しておくのです。

変数の宣言のやり方は以下の3通りです。

変数宣言

①Dim 変数名 As 変数の型
②Private 変数名 As 変数の型
③Public 変数名 As 変数の型

①は宣言したプロシージャ内でのみ使用できるもの、②は宣言したモジュール全体で使用できるもの、③はプロジェクト全体で使用できます。「変数の型」とは数字や文字など、変数に代入できるものの性質を決定するものです。変数の型は次のようなものがあります。

変数の型の例

Variant:すべての型を入れられる。型指定を省略するとすべてVariant型になる。
Integer:整数を入れられる型。
Double:実数を入れられる型。
String:文字列を入れられる型。
Object:ブックやシート、セルなどのオブジェクトを入れられる型。

例えば文字列を入れられる変数を宣言したい場合はこのようになります。

Dim str As String

これによって変数「str」には任意の文字列を入れられるようになります。

セルを操作するときはRangeもしくはCellsを使用することが多いです。Rangeはセルのアドレスを文字で指定します。

Range("A1") → セルA1を表す。
Range("A1:C3") → セルの範囲A1からC3を表す。

Cellsはセルの行と列を数値で指定します。

Cells(2,3) → セルC2

構文とはプログラミング言語の構成のようなものです。英語や日本語など実際の言語の構文と意味合いは同じです。VBAの構文は大きく分けると次の3つがあります。

VBAの構文例

①オブジェクト式
②ステートメント
③関数

①オブジェクト式

ここで言うオブジェクトとはブックやシート、セルや変数など処理をあたえる対象のことを指します。オブジェクト式は次の2つび分類できます。

オブジェクト式

①オブジェクトに値や状態を設定する構文
②オブジェクトに命令を与える構文

①の例としては次のようにセルに値を代入する構文があります。「Value」のことを「プロパティ」といい、オブジェクトの様子や状態を示すものです。

Range("A1") .Value = 100

この構文でA1セルに100が入力されます。この構文ではプロパティを省略することもできます。

②の例としては次のようにセルの値をコピーペーストする構文があります。「Copy」のことを「メソッド」、「Destination:= Range("A2")」のことを「引数」といいます。

Range("A1") .Copy Destination:= Range("A2")

この構文でA1セルの値がA2セルにコピーされます。「Destination:=」は省略することができます。

②ステートメント

ステートメントとは条件分岐や繰り返し処理など、マクロの動作を制御する構文です。

ステートメントの例

①Ifステートメント
②For Nextステートメント

①のIfステートメントは条件分岐処理を実施するときに使用します。Ifステートメントの例文は次のようになります。

If 条件1 Then

 処理1

ElseIf 条件2 Then

 処理2

Else

 処理3

End If

これはもし条件1に合致したら処理1を実行、条件2に合致したら処理2を実行、条件1,2以外であれば処理3を実行するというコードです。

②のFor Nextステートメントは指定した回数だけ処理を繰り返すときに使用します。次に例文を記載します。

For 変数 = 初期値 To 終了値

 処理

Next 変数

変数に「i」を宣言して構文を組むとこうなります。この構文によってiが1から5まで変化しながら、処理を繰り返します。

For i = 1 To 5

 処理

Next i

iの値の変動値も指定することができます。次構文はiの値が10からスタートし、0になるまで-2ずつしていきます。

For i = 10 To 0 Step -2

 処理

Next i

③関数

関数は通常のExcelで使用するSUM関数などと同様に、引数に与えたデータから決まった処理を行って結果を返す命令です。

ブックやシートを指定せずにRangeやCellsを使用してセルを指定すると、現在開いているブックとシートのセルが対象になります。これをアクティブブックアクティブシートと呼びます。アクティブブックやアクティブシート以外の場所にあるセルを指定したいときは、セルの前にブックとシートの場所を指定しなければなりません。

ブックとシートの指定

ブックを指定するときはWorkbooksにファイル名を記入して使用します。

Workbooks("Book1.xlxs")

これはファイル名「Book1」のエクセルデータを示します。

シートを指定するときはWorkSheetsにシート名やシート番号を記入して使用します。

WorkSheets("Sheet1")

これはシート名「Sheet1」のシートを示します。

以上を組み合わせて「Book1」の「Sheet1」のセルA1を指定するときは次のようになります。

Workbooks("Book1.xlxs").WorkSheets("Sheet1").Cells(1,1)

ブックとシートのメソッド

次にブックやシートに使用できるメソッドをまとめてみます。

ブックとシートのメソッド例

①Addメソッド:新しいワークシートやブックを追加する。
②Nameメソッド:シートに名前をつける。
③Deleteメソッド:シートを削除する。
④Saveメソッド:ブックを保存する。

⑤SaveAsメソッド:ブックに名前を付けて保存する。
⑤Closeメソッド:ブックを閉じる。

例えば、新しいシート挿入して名前をつけるときは次のようになります。

Worksheets.Add
ActiveSheet.Name = "新規シート"

「ActiveSheet」はアクティブシートを表します。

アクティブブックに名前を付けて保存するときは次のようになります。

ActiveWorkbook.SaveAs "C:¥新規ファイル.xlsm"

保存するときはパスを指定してから名前を付けます。パスを省略するとカレントディレクトリに保存されます。

実際にコードを書いて、どのように動作するかを見てみましょう。Subプロシージャを作成し、標準モジュールに新しいワークシートを追加し名前を与えるコードをかきます。プロシージャについては別記事でまとめる予定なので、今は「Sub」から「End Sub」がひとつのプロシージャと覚えてください。Subの後ろの文字がプロシージャのタイトルになります。

プロシージャを作成して、ワークシート画面へ戻り、「マクロ」をクリックすると、先ほど作成した「新規シート追加」のプロシージャが登録されています。

これを実行すると「新規追加」というシートが作成されます。

まとめ

いかがでしたでしょうか?今回はVBAの始め方から基本操作までをまとめました。この記事は今後もVBAの基礎シリーズとして発信していきますので、次の記事もぜひ読んでみてください。それではまた!