Home » エクセルマクロ・Excel VBAの使い方 » VBAの名前付き引数がピンと来ない

対象:Excel2003, Excel2007, Excel2010, Excel2013

Excel VBAの名前付き引数がピンと来ない

VBA(Visual Basic for Applications)で、コードの可読性を高めるために、名前付き引数を利用することがあります。

例えば、Excel VBAで一番左のワークシートの右側にワークシートを挿入する場合、名前付き引数を使わない標準引数では、
  Worksheets.Add , Worksheets(1)
と書きますが、名前付き引数を使うと
  Worksheets.Add After:=Worksheets(1)
と書きます。

名前付き引数で可読性が上がる

名前付き引数を使わない標準引数の
  Worksheets.Add , Worksheets(1)
というコードだと、ワークシートが一体どこに挿入されるのかは、Worksheets.Addメソッドを使い慣れていなければわかりません。Worksheets(1)の前の「,」(カンマ)を見落とす人だって出てくるでしょう。

この場合コメントが必要でしょう。

しかし、名前付き引数の
  Worksheets.Add After:=Worksheets(1)
というコードならば、どこにワークシートが挿入されるのかは、コードだけでわかります。コメントを残す必要はありません。

[スポンサードリンク]

この名前付き引数が、どうもピンと来ないという方が、時々いらっしゃいます。

ピンと来ない理由はいくつか考えられます。

名前付き引数の:=を=と混同して代入文をイメージしてしまっている

名前付き引数を使うときには、引数の名前と、引数とを「:=」(コロンとイコール)でつなげます。

ここに「=」という記号が使われているために、無意識に代入文をイメージしてしまっているという可能性があります。

名前付き引数を指定するときに使う「:=」という記号は、代入文とはまったく関係がありません。

たまたま、「=」という記号が含まれているだけです。

名前付き引数の場合、代入が行われているわけではありません。

例えば、
 Worksheets.Add After:=Worksheets(1)
なら、Afterという名前の引数に、Worksheets(1)を指定していることを示しているだけです。

VBAは、英語のルールをかなり引きずっています。

英語は、意味のある単語や記号の前後に、スペースが、必ず入る言語です。

VBAでもこの原則は同じです。

代入演算子「=」は、左側のものに、右側のものを代入するという意味を持った記号ですから、「=」の前後にスペースが入っています。

名前付き引数を指定するときの「:=」はそれだけでは意味のない記号です。ですから「:=」の前後にスペースは入っていません。

意味のある「After:=Worksheets(1)」という前後にスペースが入っています。

名前付き引数がピンと来ないという方は、代入文をイメージしてしまっていないか、しっかりと意識してみてください。

カッコがついていないことにより名前付き引数について混乱している

戻り値を使わないときには、引数をカッコで括らないというのがVBAの文法です。

プロパティでも、メソッドでも、関数でも、同じです。

これによって名前付き引数がピンと来ないという方がいらっしゃるかもしれません。

先ほどの、
  Worksheets.Add After:=Worksheets(1)
というコードも、戻り値を使うのならカッコで引数を括らなければなりません。

例えば、挿入したシートをオブジェクト変数shに格納するのなら
  Set sh = Worksheets.Add(After:=Worksheets(1))
というコードになります。

例えば、挿入したシートにすぐに「集計用シート」名前をつけるのなら
  Worksheets.Add(After:=Worksheets(1)).Name = "集計用シート"
というコードになります。

カッコに括られると、カッコのない状態よりも、引数らしく見えてくるのではないかと思いますが、いかがでしょう。

名前付き引数が使えるけれど使っていないケースがある

VBAのプロパティやメソッドの引数には、実は、必ず名前がついています。

例えば、
  Range("A1").Value = "合格"
といったよく見かけるコードも名前付き引数を使って
  Range(Cell1:="A1").Value = "合格"
と書くことも、実は、できます。

ですが、
  Range(Cell1:="A1").Value = "合格"
といったコードを書く人はほとんどいないはずです。

名前付き引数を使っていない
  Range("A1").Value = "合格"
というコードで十分だからです。

むしろ、
  Range(Cell1:="A1").Value = "合格"
と名前付き引数を使うほうが、文字数が増えむしろ読み辛く可読性が落ちます。

一般に、引数をたくさん指定できるプロパティやメソッドでは、名前付き引数を使うほうが、可読性が高まることが多いはずです。

以上のようなことを頭に入れて、名前付き引数の含まれているコードをもう一度しっかりと読んだり、あえて名前付き引数を使わないコードに変更してみたりして、名前付き引数について何が納得できていなかったのか考えてみてください。

最終更新日時:2021-05-11 13:39

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBAの名前付き引数がピンと来ない

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.