1日の仕事の中で、単純作業の繰り返しに費やしている時間は少なくないでしょう。例えば、全角で書かれた英数字を半角に書き直す(または半角を全角に書き直す)といった作業はないでしょうか? 表に行を追加したり、削除したりする作業も同様です。

 昨日書きかけだった書類を毎朝開くという当たり前のようなことも、繰り返し作業の一つです。さまざまな部門・顧客から送られてきた、数十もあるWordファイルを一つひとつ開いて内容を確認する、なんてこともありますね。

 それぞれの作業は小さなものですが、一日に何度も繰り返すとなると費やす時間はばかになりません。こういうちょっとしたことをマクロで自動化することが、大きな違いをもたらすのです。

●注:今回のマクロは、文書に変更を加えるものを含みます。筆者は、今回に限らず、この連載にて紹介したマクロを使用した結果について何ら責任を負いませんので、マクロの使用には十分お気を付けください。

1. 文字種を変換する

 最初に、選択されている文字列の半角/全角変換を実行し、選択を解除するマクロを見てみましょう。

 Word 2003の場合、文字種の変換は、「書式」メニューから「文字種の変換」を選んで「文字書の変換」ダイアログボックスを表示させ、そこで操作をしなくてはなりません。Word 2007以降は、「ホーム」タブに「文字種の変換」ボタンが用意されて比較的簡単にはなりましたが、ボタンをクリックして開くメニューから「全角」または「半角」を選ぶ必要があります。

Word 2010で「文字種の変換」を実行しているところ
Word 2010で「文字種の変換」を実行しているところ
[画像のクリックで拡大表示]

 今回は、この操作をマクロ化してみましょう。せっかくマクロで実行するので、リボン上のボタンを操作するのと同じでは面白くありません。ちょっとしたことですが、変換後に選択を解除する操作も追加してみます。

 以下は、半角の文字列を全角に変換するマクロです。1行目で選択範囲の文字列を全角に変換し、2行目で選択範囲を解除する(キーボードの[→]を1回押した後の状態)という処理を記述しています。

Sub 全角へ変換()    Selection.Range.CharacterWidth = wdWidthFullWidth    Selection.Collapse wdCollapseEndEnd Sub

 このマクロの赤い下線部分を変更すれば、さらに多様な変換が可能になります。

半角へ変換Selection.Range.CharacterWidth = wdWidthHalfWidth
アルファベットを小文字へ変換Selection.Range.Case = wdLowerCase
アルファベットを大文字へ変換Selection.Range.Case = wdUpperCase

 さて、もう少し自動化を進めてみましょう。今度は、文書中にあるすべての半角の英数字を全角の英数字に一気に変換します。

Sub 半角英数字を全角英数字へ一括変換()    Dim myRange As Range    Set myRange = ActiveDocument.Range(0, 0)    With myRange.Find        .Text = "[0-9A-Za-z]{1,}"        .MatchWildcards = True        Do While .Execute = True            myRange.CharacterWidth = wdWidthFullWidth            myRange.Collapse wdCollapseEnd        Loop    End With    Set myRange = NothingEnd Sub

 4行目の「.Text = "[0-9A-Za-z]{1,}"」で、検索対象となる文字列を特定します。細かな説明は省略しますが、ワイルドカード(正規表現)で検索対象を特定しています。これを全角に変換する処理が、7行目の「myRange.CharacterWidth = wdWidthFullWidth」です。

 このマクロも、少し手を加えることでさまざまな応用が可能です。例えば全角英数字を半角英数字に変換する場合には、4目と7行目を以下のように変更します。

4行目:.Text = "[0-9A-Za-z]{1,}"
7行目:myRange.CharacterWidth = wdWidthHalfWidth

 同様に、全角・半角の英字をすべて大文字にする場合には、以下のようにします。

4行目:.Text = "[A-Za-zA-Za-z]{1,}"
7行目:myRange.Case = wdUpperCase

 逆に、全角・半角の英字をすべて小文字にする場合には、以下のように書き換えます。

4行目:.Text = "[A-Za-zA-Za-z]{1,}"
7行目:myRange.Case = wdLowerCase

 作成したマクロは、すぐに実行できるようにしておきましょう。前回はキーボードにマクロを登録することを提案しました(前回記事)。ただ何でもかんでもキーボードに登録していると、ショートカットキーを覚えきれなくなってしまいます。そこで時々しか使わないマクロは、クイックアクセスツールバー(Word 2007/2010)やツールバー(Word 2003)に登録することをお勧めします。登録方法は、筆者のブログ記事で解説していますので、ご覧ください。