以前の記事「カーソル位置の文頭文字の大・小文字を切り替えるWordマクロ」では、文中にピリオドを含む単語(FIG.など)があると、Wordが文末だと勘違いしてしまう不具合がありました。
作り込むのは面倒なので、まあしょうがないなと思ってそのままにしておいたのです。
ところが、先日の勉強会の参加者からいろいろ工夫をされていることを伺いまして、それをヒントに私もマクロを作ってみました。
やっぱり、出かけて行って情報交換って大切ですね。
ちなみに、その方にこのマクロを差し上げたときにいただいたお返事が粋でした。
「ショートカットキーが一つ空いた」ことへの感謝の言葉だったのです(笑)。
この方はかなり高度にキーボードをカスタマイズされていまして、この大文字・小文字の切り替えマクロがいくつかのキーを押して操作するタイプだったようです。
このマクロを使うと、1つのキーで実行できますので、ショートカットキーが1つ空いたというわけです。
どうぞお試しください。
<目次>
このマクロでできること
カーソルが置かれている文章の先頭の単語の1文字目を大文字・小文字で切り替えます。
特許文献における段落番号(【0001】や、[0001]など)を除外して文章の先頭の1文字を特定します。
マクロの解説
以前の「カーソル位置の文頭文字の大・小文字を切り替えるWordマクロ」とは比べものにならないくらい長くて面倒な(笑)マクロになります。
様々な条件を踏まえてしっかり作り込むとこんなことになってしまうという例です。
技術文で使えるようになっています。文中で、文末ではないけれども使われているピリオドには、Mr. や Ms. や No. などいろいろあります。
除外する必要がある場合には、赤文字部分に追記してください。
また、文頭にピリオド付きの単語が記載されている場合に、その単語の先頭1文字を大文字・小文字変換しない場合には、青文字部分に除外文字を追記してください。
マクロ
Sub 文頭の文字の大文字_小文字変換() Dim myRange As Range Dim myTempRange As Range Dim myText As String Dim myStopChr As String '文末の判定のためにカーソルを移動させる記号 'myStopChr の直前で移動終了(MoveStartUntilメソッドを利用) myStopChr = ".】]" & Chr(9) & Chr(11) & Chr(12) & Chr(13) & Chr(14) 'Rangeオブジェクトでカーソルを移動→カーソル移動は目に見えない Set myRange = Selection.Range myRange.MoveStartUntil Cset:=myStopChr, Count:=wdBackward Do '見つけたピリオドが小数点の場合(前後に数字がある場合)には 'さらにカーソルを移動させる If myRange.Characters.First.Text Like "[0-9]" And _ myRange.Characters.First.Previous(wdCharacter, 1).Text = "." And _ myRange.Characters.First.Previous(wdCharacter, 2).Text Like "[0-9]" Then myRange.Start = myRange.Start - 1 myRange.MoveStartUntil _ Cset:=myStopChr, Count:=wdBackward Else Set myTempRange = myRange.Duplicate myRange.SetRange Start:=myRange.Start - 1, End:=myRange.Start myRange.MoveStartUntil _ Cset:=Chr(9) & Chr(11) & Chr(12) & Chr(13) & Chr(14) & Chr(32), _ Count:=wdBackward myText = myRange.Text 'ピリオドの直前の文字列がFIG.等の場合には、さらにカーソルを移動する Select Case myText Case "FIG.", "Fig.", "FIGS.", "Figs.", "FIGs", "e.g.", "i.e.", "etc." myRange.MoveStartUntil _ Cset:=myStopChr, Count:=wdBackward Case Else Exit Do End Select End If Loop myTempRange.MoveStartWhile _ Cset:=Chr(32), Count:=wdForward '文頭の文字列がFIG.等の場合には、大文字・小文字の変換をしない Select Case myTempRange.Text Case "FIG.", "Fig.", "FIGS.", "Figs.", "FIGs." '何もしない Case Else With myTempRange.Characters.First If .Case = wdUpperCase Then .Case = wdLowerCase ElseIf .Case = wdLowerCase Then .Case = wdUpperCase End If End With End Select Set myRange = Nothing Set myTempRange = Nothing End Sub