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

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

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

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

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

[スポンサードリンク]

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

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


Sub カーソル位置から段落記号の前まで選択する()

 With Selection.Range
   .MoveEndUntil vbCr
  .Select
 End With

End Sub

Rangeオブジェクトには、指定した文字位置までRangeを拡張する、MoveEndUntilメソッドが用意されています。

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

Range.MoveEndUntilメソッドを実行すると、引数に指定された文字の直前までの(引数に指定された文字は含まない)Rangeオブジェクトになりますので、上記のようなコードで段落記号の直前までの文字列が選択できます。

Range.MoveEndUntilメソッドの第2引数

上記マクロの、
  .MoveEndUntil vbCr
の部分は、
  .MoveEndUntil vbCr, wdForward
とも書けますが、「MoveEndUntil」というメソッド名から、第2引数・wdForwardはなくても可読性は落ちないと感じます。

むしろ第2引数はないほうが読みやすいと感じます。

名前付き引数を使うことが必ずしも可読性をあげるわけではない

更に気になるコードの可読性についてです。
先にご紹介したカーソル位置から段落記号の前まで選択するマクロは、名前付き引数を使って省略可能な第2引数を省略しないで書くと、以下のように書くこともできます。


Sub カーソル位置から段落記号の前まで選択する_名前付き引数()

 With Selection.Range
   .MoveEndUntil Cset:=vbCr, Count:=wdForward
  .Select
 End With

End Sub

先にご紹介した、
標準引数を使って、省略可能な第2引数を省略した、
  .MoveEndUntil vbCr
というコードと、
名前付き引数を使って、すべての引数を省略しないで書いた、
  .MoveEndUntil Cset:=vbCr, Count:=wdForward
というコードの、読みやすさ・理解しやすさを比べてみてください。

第1引数の「Cset」とは、おそらく「Characters Set」の省略形でしょう。
この「Cset」という省略形の名前も思うところがありますけれど、まぁOKでしょう。

ですが、第2引数・Countのほうはいただけません。
「Count」という名前の引数に、「数」とはまったく関係のない「方向」を示す「wdForward」という定数が指定されることによって「Count:=wdForward」の部分は意味が非常にわかり辛くなってしまっています。

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

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

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

関連語句
VBA, Visual Basic for Applications
[スポンサードリンク]

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

TrackBack:0

TrackBack URL

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

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

検索


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

.