Home » ワードマクロ・Word VBAの使い方 » 段落・パラグラフ » 段落記号の直前までの文字列をWord VBAで選択する

段落記号の直前までの文字列をWord VBAで選択する

対象:Word2007, Word2010, Word2013, Windows版Word2016

Wordマクロで、任意の位置から段落記号の直前までの文字列を取得したい、という場面がありました。

そのようなマクロを作る過程で、コードの可読性について思うところがありましたので、記事にしておきます。

[スポンサードリンク]

カーソル位置から段落記号の直前まで選択するサンプルマクロ

以下のようなWordマクロで、カーソル位置から段落記号の直前の文字列を選択できます。

Sub カーソル位置から段落記号の前まで選択する()
 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引数を省略しないで書くと、以下のように書くこともできます。

Sub カーソル位置から段落記号の前まで選択する_名前付き引数()
 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」の部分は意味が非常にわかり辛くなってしまっています。

これは、Range.MoveEndUntilメソッドの第2引数に、2種類の異なるタイプのデータを指定できるようにしてしまったMicrosoftの設計ミスだと、私は考えています。

特に指定できる引数の数が多いときに、標準引数よりも名前付き引数を使うほうが、一般的には読みやすいコードになることが多いはずです。

ここでご紹介したMoveEndUntilメソッドは、逆に、名前付き引数を使うことで、可読性が落ちてしまうケースです。

最終更新日時:2022-10-04 13:03

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » 段落・パラグラフ » 段落記号の直前までの文字列をWord VBAで選択する

「段落・パラグラフ」の記事一覧

検索


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

.