VBAのコードの中で「:=」という記号を使う場合がある。たとえば、VBAエキスパート公式テキスト(Excel VBA ベーシック)には次の例が載っている。
ActiveCell.Delete shift:=xlUp
「これってイコールを使うのでは?」と疑問持つ人もいると思うが、「=」を使うと正常に動作しない。コンパイルエラーが発生する。
「:=」を使うケース
どういうときに「=」ではなく「:=」を使うのかというと、それは名前付き引数を利用するときだ。それ以外では使わない。
では、名前付き引数とは一体何なのだろうか。少し遠回りかもしれないが、まずは、普通の引数について考えてみる。
次のサンプルコードAを見てほしい。Subプロシージャ「Test1」と「Test2」が定義されている。「Test1」を実行すると、「Test2」が呼び出される。その結果、指定されたセルのフォントサイズが変わる(セルB2のフォントサイズが40になる)。
◆サンプルコードA
Sub Test1()
Call Test2("B2", 40) '①
End Sub
'指定されたセルのフォントサイズを変更する
Sub Test2(cellAddress As String, fontSize As Integer)
Range(cellAddress).Font.Size = fontSize
End Sub
①の行では、セルのアドレスとフォントサイズを「Test2」に渡している。これは普通の引数の使い方だ。
このサンプルコードAを、名前付き引数を使って書きなおすと次のようになる。
◆サンプルコードB
Sub Test1()
Call Test2(cellAddress:="B2", fontSize:=40) '②
End Sub
Sub Test2(cellAddress As String, fontSize As Integer)
Range(cellAddress).Font.Size = fontSize
End Sub
「Test2」の内容は何も変わっていない。「Test1」の②の行だけ変更している。②の行では、引数名と値をセットで書いている(cellAddress:="B2" と fontSize:=40)。引数名も指示するのが名前付き引数の使い方だ。このときに、引数名と値を「=」ではなく「:=」で結ぶ必要がある。
× Call Test2(cellAddress = "B2", fontSize = 40)
○ Call Test2(cellAddress:="B2", fontSize:=40)
名前付き引数を使うと可読性が上がる
サンプルコードAとサンプルコードBで、実行結果は何も変わらない。しかし、両者にはそれぞれ特徴がある。
サンプルコードAのように、引数の値だけ書くコードは簡潔だ。冗長になりにくい。
それに対して、サンプルコードBのように名前付き引数を使う場合、コードが長くなる。しかし、可読性が上がるというメリットがある。それは、次の2つを見比べると分かると思う。
A. Call Test2("B2", 40)
B. Call Test2(cellAddress:="B2", fontSize:=40)
Aのほうは「40」という数値が何を表しているのか分からない。
(プロシージャ「Test2」の内容を見れば分かるが)
Bのほうは「fontSize:=40」と書かれている。そのため、フォントサイズを渡しているんだな、ということは一目瞭然だ。引数の名前が、可読性をあげるための情報になっている。
さらに、もう一つ例を挙げる。次のプロシージャは、ワークシートを追加するプロシージャだ。
Sub Test()
Worksheets.Add Sheet1
End Sub
Sheet1の前に新しいシートを追加するのか、それとも後ろに追加するのか……分かりにくいと思う。こういう場合に名前付き引数を使う。そうすれば、Sheet1の前に新しいシートを追加することが明確に伝わる。
Sub Test()
Worksheets.Add before:=Sheet1
End Sub
練習問題
アクティブセルを削除して上方向にシフトするマクロを作成した。正しく動作するものはどれか。次の中から1つ選択しなさい。
Sub Lesson()
ActiveCell.Delete shift::xlUp
End SubSub Lesson()
ActiveCell.Delete shift=:xlUp
End SubSub Lesson()
ActiveCell.Delete shift:=xlUp
End SubSub Lesson()
ActiveCell.Delete shift = xlUp
End Sub
正解を見る
コメント