VBAのコードで、ときどき「:=」という記号を見かけます。たとえば次のようなコードです。
Sub Sample1() Workbooks.Open Filename:="Book1.xls" End Sub
これは、Book1.xlsを開くマクロですが、これを次のように書くとエラーになります。
Sub Sample2() Workbooks.Open Filename = "Book1.xls" End Sub
上記のコードは、引数Filenameに"Book1.xlsx"という文字列を設定しているので、何となく正しいようにも思えます。だって、変数に値を代入するときは「=」を使うのですから。
Sub Sample3() Dim Target As String Target = "Book1.xlsx" End Sub
値を代入(設定)するとき「=」と「:=」の違いは何なのでしょう。
「:=」の意味を理解するのは、まず「=」の話からしなければなりません。
VBAで「=」は、数学のイコールのように右辺と左辺が等しいという使い方だけでなく、右辺を左辺に代入するという意味も持ちます。たとえば、次のマクロはセルA1に100を代入します。
Sub Sample() Range("A1").Value = 100 End Sub
これは、Range("A1").Value と 100 が等しいという意味ではなく、右辺の 100 を、左辺の Range("A1").Value に代入する、いわば Range("A1").Value ← 100 のようなイメージです。
さて、話は変わりますが、VBAのオブジェクト式には、次の2種類があります。
(1)対象.様子 = 値
(2)対象.命令
(1)は、セルやワークシートなどの様子や状態を設定する書式です。先の Range("A1").Value = 100 も、この(1)の書式です。
もうひとつの(2)は、何らかのアクションを起こすような書式です。たとえば Range("A1").Delete と書けば、Range("A1")を削除できます。(1)の"様子"を、専門用語で"プロパティ"と呼び、(2)の"命令"を"メソッド"と呼びます。まぁ、用語はどうでもいいのですが。
(2)の"命令"は削除したり挿入したりと、何らかのアクションを起こすコマンドですが、この"命令"には、「どんな風に」実行するかとか、実行したあと「その後どうするか」とか、実行に必要な情報を指定できるものがあります。いわば、実行に対する"オプション"ですね。そうしたオプションのことを引数(ひきすう)と呼びます。
この、引数に値を設定するときに使用される記号が「:=」です。右辺を左辺に代入するという意味では「=」と同じ働きですが、引数を指定するときだけは、「=」ではなく「:=」を使わなければなりません。それがVBAのルールです。また「:=」は、「対象.命令」の"命令(メソッド)"で引数を設定するときだけしか使えませんから、この記号があったら、それは「メソッドを実行している」と判断できます。
たとえば、「田中」というオブジェクトに対して「走れ」というメソッドを実行するとします。VBA的に書くと、次のようになります。
田中.走れ
しかし、ただ走れと言われても、どこに走ればいいのか、どのくらい本気で走るのかによって、走り方が違います。そこで「走れ」という命令に対して、いくつかのオプションを指定します。たとえば「目的地は駅まで」で「全力で走れ」みたいに。もし、「走れ」メソッドに「目的地」と「速度」というオプションがあるなら、これをVBA的に表すと次のようになります。
田中.走れ 目的地:=駅, 速度:=全力
このように、メソッドのオプション(引数)を指定するときに使うのが「:=」です。ブックを開くには、WorkbooksコレクションのOpenメソッドを実行します。
ブック.開け ↓ Workbooks.Open
このとき「どのブックを開くのか」というオプションを指定できます。というか、指定しないと、どのブックを開いたらいいかわかりません。だから、必ず指定します。
ブック.開け どのブック:="C:\Sample.xlsx" ↓ Workbooks.Open Filename:="C:\Sample.xlsx"
ということです。もうひとつ例をお見せします。セル(Rangeオブジェクト)を削除するときは、Deleteというメソッドを使います。セルを削除するときは、削除した後のセルをどちらにシフトするかを選択できます。
セルB2を削除して、削除した後のセルを左方向にシフトするなら
Range("B2").Delete Shift:=xlToLeft
となります。これは、マクロ記録で記録されるコードですが、このように、メソッドのオプションに指定する値として「xlToLeft」のように「xl○○」という語が記録されるときがあります。こうした「xl○○」を定数と呼びます。定数については、下記をご覧ください。
また、こうしたメソッドの動作に関するオプションは、名称を省略することができます。これも詳しくは、下記で解説します。