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

対象:Excel2003, Excel2007, Excel2010, Excel2013

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

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

例えば、
一番左のワークシートの右側に、ワークシートを挿入するマクロを作るとき、名前付き引数を使わない標準引数の場合は、
 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 = "合格"
と名前付き引数を使うほうが、かえって読み辛く可読性が落ちます。

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

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

[スポンサードリンク]

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

TrackBack:4

TrackBack URL
名前付き引数が見つかりませんエラーが表示される from インストラクターのネタ帳
Excel(エクセル)マクロを作成しているときに、名前付き引数が見つかりませんエラーが表示される原因と対処方法をご紹介しています。
Application.GoTo Reference:=とは from インストラクターのネタ帳
Excel VBAの、Application.GoToメソッドの引数・Referenceついて解説しています。
Rangeプロパティの引数の名前 from インストラクターのネタ帳
Rangeプロパティの引数名(Cell1とCell2)は、ヘルプ・オブジェクトブラウザーでも調べられますが、入力時にはヒントを参考にするのが便利です。
コメントの挿入をマクロ記録してできるコードにモヤモヤする from インストラクターのネタ帳
Range.AddCommentメソッドには、コメントとして追加する文字列を引数に指定できます
[スポンサードリンク]

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

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

検索


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

.