Wordマクロで、任意の位置から段落記号の直前までの文字列を取得したい、という場面がありました。
そのようなマクロを作る過程で、コードの可読性について思うところがありましたので、記事にしておきます。
カーソル位置から段落記号の直前まで選択するサンプルマクロ
まず、マクロをご紹介しておきます。
以下のようなマクロで、カーソル位置から段落記号の直前の文字列を選択できます。
With Selection.Range
.MoveEndUntil vbCr
.Select
End With
Rangeオブジェクトには、指定した文字位置までRangeを拡張する、MoveEndUntilメソッドが用意されています。
Range.MoveEndUntilメソッドを実行すると、引数に指定された文字の直前までの(引数に指定された文字は含まない)Rangeオブジェクトになりますので、上記のようなコードで段落記号の直前までの文字列が選択できます。
Range.MoveEndUntilメソッドの第2引数
上記マクロの、
.MoveEndUntil vbCr
の部分は、
.MoveEndUntil vbCr, wdForward
とも書けますが、「MoveEndUntil」というメソッド名から、第2引数・wdForwardはなくても可読性は落ちないと感じます。
むしろ第2引数はないほうが読みやすいと感じます。
名前付き引数を使うことが必ずしも可読性をあげるわけではない
更に気になるコードの可読性についてです。
先にご紹介したカーソル位置から段落記号の前まで選択するマクロは、名前付き引数を使って省略可能な第2引数を省略しないで書くと、以下のように書くこともできます。
With Selection.Range
.MoveEndUntil Cset:=vbCr, Count:=wdForward
.Select
End With
先にご紹介した、
標準引数を使って、省略可能な第2引数を省略した、
.MoveEndUntil vbCr
というコードと、
名前付き引数を使って、すべての引数を省略しないで書いた、
.MoveEndUntil Cset:=vbCr, Count:=wdForward
というコードの、読みやすさ・理解しやすさを比べてみてください。
第1引数の「Cset」とは、おそらく「Characters Set」の省略形でしょう。
この「Cset」という省略形の名前も思うところがありますけれど、まぁOKでしょう。
ですが、第2引数・Countのほうはいただけません。
「Count」という名前の引数に、「数」とはまったく関係のない「方向」を示す「wdForward」という定数が指定されることによって「Count:=wdForward」の部分は意味が非常にわかり辛くなってしまっています。
特に指定できる引数の数が多いときに、標準引数よりも名前付き引数を使うほうが、一般的には読みやすいコードになることが多いはずです。
ここでご紹介したRange.MoveEndUntilメソッドは、逆に、名前付き引数を使うことで、可読性が落ちてしまうケースです。
Home » ワードマクロ・Word VBAの使い方 » 段落・パラグラフ » 段落記号の直前までの文字列を選択するWordマクロ
- Newer:VBAでOr条件を3つ以上複数指定する
- Older:End Subの下に線が引かれなくなった
TrackBack:0
- TrackBack URL