【Word VBA】カーソル位置の文頭文字の大・小文字を切り替えるWordマクロ

2011年4月13日

CT (Cooperative Translation) による日英翻訳で、案外便利なのがこのマクロです。

CTでの日英翻訳においては、日本語テキストの中に一義的に決まる英単語が散在するところから翻訳作業をはじめます。

用語集を用いて一括置換をすることで上記の状態を作り出します。(関連記事は、水野麻子さんの「辞書引きと入力の自動化をYouTubeで 」をご覧ください。)

そして、この英単語を並び替える(コピー&ペーストする)ことで英文を作っていきます。(関連記事は、水野麻子さんの「初公開!カット&ペーストでの翻訳 」をご覧ください。)

この並べ替えのときに、文頭にある単語の1文字目を大文字にすることを自動化します。

カーソルを移動せずに、さらに、消して書き直す必要がないので、便利ですよ。

私はキーボードに割付けて実行しています。

ワードマクロ勉強会などでデモでお見せすると喜ばれるちょっとしたマクロです。

マクロでできること

カーソルが置かれた文章の文頭の単語の1文字目を大文字・小文字に切り替えます。

文頭の判定には、Wordソフト自体が判定する文章の1文字目としています(20行、40行)。

注意点

以下のような場合には(カーソル位置を赤いバーで表示)、Wordが文章の固まりを誤認識しますので、思ったような結果が得られませんのでご了承ください(他にも例外があると思います)。

As shown in FIG. A1, the apparatus consists of a disc and a transmission system to allow rotation of the disc.

この場合には、figure の短縮形であるFIG. に用いられるピリオドを、文末のピリオドと誤認識してしまいます。

結果として、文頭の1文字目を「A1のA」と認識して大文字・小文字を切り替えてしまうため、本来文頭であるべきはずの「AsのA」の大文字・小文字の切り替えができません。

マクロの解説

8行目で、カーソルが置かれている文章全体を選択します。

7行でRangeオブジェクトを定義して用いているため、マクロ実行中に視覚的に選択範囲が広がることはありません。

10行では、文頭にタブ(Chr(9))と半角スペース(Chr(32))がある場合にはそれらを無視するために、カーソル位置を変更しています。

MoveStartWhile メソッドを用いることで、選択範囲の開始位置を移動させます。

13行で、First プロパティを用いて、選択範囲の文字の最初の1文字を選択します。

14行~18行で、この1文字が大文字であれば、小文字に、小文字であれば、大文字に変更しています。

マクロ


Sub Case_Change_Sentence()

 '文頭の文字の大文字・小文字変換
 
 Dim myRange As Range
 
 Set myRange = Selection.Range
 myRange.Expand unit:=wdSentence
 
 myRange.MoveStartWhile cset:=Chr(9) & Chr(32), _
              Count:=wdForward
 
 With myRange.Characters.First
  If .Case = wdUpperCase Then
   .Case = wdLowerCase
  ElseIf .Case = wdLowerCase Then
   .Case = wdUpperCase
  End If
 End With

End Sub

-コード
-,