1日の仕事の中で、単純作業の繰り返しに費やしている時間は少なくないでしょう。例えば、全角で書かれた英数字を半角に書き直す(または半角を全角に書き直す)といった作業はないでしょうか? 表に行を追加したり、削除したりする作業も同様です。
昨日書きかけだった書類を毎朝開くという当たり前のようなことも、繰り返し作業の一つです。さまざまな部門・顧客から送られてきた、数十もあるWordファイルを一つひとつ開いて内容を確認する、なんてこともありますね。
それぞれの作業は小さなものですが、一日に何度も繰り返すとなると費やす時間はばかになりません。こういうちょっとしたことをマクロで自動化することが、大きな違いをもたらすのです。
1. 文字種を変換する
最初に、選択されている文字列の半角/全角変換を実行し、選択を解除するマクロを見てみましょう。
Word 2003の場合、文字種の変換は、「書式」メニューから「文字種の変換」を選んで「文字書の変換」ダイアログボックスを表示させ、そこで操作をしなくてはなりません。Word 2007以降は、「ホーム」タブに「文字種の変換」ボタンが用意されて比較的簡単にはなりましたが、ボタンをクリックして開くメニューから「全角」または「半角」を選ぶ必要があります。
今回は、この操作をマクロ化してみましょう。せっかくマクロで実行するので、リボン上のボタンを操作するのと同じでは面白くありません。ちょっとしたことですが、変換後に選択を解除する操作も追加してみます。
以下は、半角の文字列を全角に変換するマクロです。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行目を以下のように変更します。
7行目:myRange.CharacterWidth = wdWidthHalfWidth
同様に、全角・半角の英字をすべて大文字にする場合には、以下のようにします。
7行目:myRange.Case = wdUpperCase
逆に、全角・半角の英字をすべて小文字にする場合には、以下のように書き換えます。
7行目:myRange.Case = wdLowerCase
作成したマクロは、すぐに実行できるようにしておきましょう。前回はキーボードにマクロを登録することを提案しました(前回記事)。ただ何でもかんでもキーボードに登録していると、ショートカットキーを覚えきれなくなってしまいます。そこで時々しか使わないマクロは、クイックアクセスツールバー(Word 2007/2010)やツールバー(Word 2003)に登録することをお勧めします。登録方法は、筆者のブログ記事で解説していますので、ご覧ください。