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