シートの全セルの全角英数字を半角に変換するには

Excelの文章修正作業でたまにあるのが、全角文字と半角文字の変換です。

ここでは全角英数字を半角に変換する際に正規表現を使う方法を紹介しますが、正規表現がわからなくても大丈夫(コードをコピペでOK)にしています。

なお、正規表現についての詳細は「VBAで正規表現(RegExp)を利用する」をご参照ください。


事前設定

以下のVBAコードは事前に正規表現の参照設定をしておく必要があります。

VBAの画面でツールメニュー→参照設定のダイアログを開き、「Microsoft VBScript Regular Expressions 5.5」にチェックを付けることで正規表現のRegExpクラスが利用できるようになります。


コード

以下のマクロはアクティブシートの全セルの全角英数字を半角にします。



コード説明

全角英数字を正規表現で判定するためにPatternプロパティに全角の英字と数字の”[A-Za-z0-9]+”を指定します。+は直前の文字を1文字以上、という意味になるため、英数字が続く文字列という意味になります。

置換を全角英字だけにしたい場合は「”[A-Za-z]+”」、全角数字にしたい場合は「”[0-9]+”」にしてください。

For文でシートに入力されているセル範囲をUsedRangeプロパティを使ってループしています。

For文の中でセルを1つずつ判定していますが、置換対象としないように除外判定処理を3つ入れています。空白セルの場合、数式セルの場合、全角英数字がない場合、の3つの条件のいずれかに当てはまる場合は置換をしないようにGoTo文で次のセルの処理を行うようにしています。

あとは、正規表現のRegExpクラスのExecuteメソッドで全角英数字を含む箇所をMatchesCollectionオブジェクトに格納し、それをループで1件ずつStrConv関数を使って半角に変換し、Replace関数でセルのValueプロパティの全角英数字を半角に置換しています。