Excel VBA 英数字を半角にカタカナを全角に統一する

スポンサーリンク

英数字を半角にカタカナを全角に統一する方法

VBAで文字列を「半角」や「全角」に変換するには、StrConv【ストリングコンバーション)関数を利用しますが半角に変換する場合、英数だけでなくカタカナも半角に変換されてしまします。

カタカナは全角で英数だけを半角に統一したい場合のコードをご紹介します。

A1セルから始まる表範囲の文字列の英数字のうち全角で入力されている文字列を半角に変換し、半角カタカナで入力されている文字列を全角カタカナに変換します。1行目には表見出しがあり見出しを除くセルを対象としています。

英数字を半角にカタカナを全角に変換するコードと解説

Sub 半角変換()
Dim セル As Range
Dim 変換文字 As String
Dim 半角 As String
Dim i As Long
 Range("A1").CurrentRegion.Select
 Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select
For Each セル In Selection
 変換文字 = StrConv(セル.Text, vbWide)
For i = 1 To Len(変換文字)
 半角 = StrConv(Mid(変換文字, i, 1), vbNarrow)
If Asc(半角) >= 32 And Asc(半角) <= 126 Then _
 変換文字 = WorksheetFunction.Replace(変換文字, i, 1, 半角)
Next i
セル = 変換文字
Next
End Sub
2行目【Dim セル As Range】
変換の対象とするセルを格納する変数「セル」をオブジェクト型(Range)で宣言します。


3行目【Dim 変換文字 As String】
半角カタカナを全角に変換した文字列を格納する変数「変換文字列」を文字列型(String)で宣言します。


4行目【Dim 半角 As String】
全角英数カナを半角に変換した文字を含む文字を格納する変数「半角」を文字列型(String)で宣言します。


5行目【Dim i As Long】
10行目の繰り返し処理で使用する1からの変換文字変数に格納されている
文字数を格納するカウンター変数「i」を長整数型(Long)で宣言します。


6行目【Range(“A1”).CurrentRegion.Select】
A1セルから始まる表範囲をRange【レンジ】オブジェクトのCurrentRegion【カレントリージョン】プロパティで参照し、Select【セレクト】メソッドで選択します。


7行目【Selection.Offset(1).Resize(Selection.Rows.Count – 1).Select】
6行目で選択した表範囲は1行目の見出し行を含んでいるので、Range【レンジ】オブジェクトのOffset【オフセット】プロパティを使用して選択範囲を1行下にずらして、下にずれた選択範囲をRange【レンジ】オブジェクトのResize【リサイズ】プロパティを使用して1行上に上げています。これで、1行目の見出し行を除いた表範囲を選択したことになります。


8行目【For Each セル In Selection】
For Each【フォーイーチ】ステートメントで繰り返し回数の条件を選択したセル分と指定してオブジェクト変数「セル」に順次代入します。


9行目【変換文字 = StrConv(セル.Text, vbWide)】
文字列の種類を変換するStrConv 【ストリングコンバーション】関数で、第一引数の対象文字に「セルのテキスト」第二引数の変換方法に「半角文字を全角に変換」を指定して繰り返し処理全角文の中でセルの文字列をすべて全角文字列に一旦変換して変換文字変数に代入します。これはカタカナが半角で入力されている場合に対する処理です。


10行目【For i = 1 To Len(変換文字)】
2回目の繰り返し処理です。For Next【フォーネクスト】ステートメントで1から文字の長さを返すLen【レン】関数で取り出した変数「変換文字」に格納されている文字数分の繰り返し処理の始まりです。ここから文字を一文字ずつ取り出して検証していきます。


11行目【半角 = StrConv(Mid(変換文字, i, 1), vbNarrow)】
文字列の種類を変換するStrConv【ストリングコンバーション】関数の第一引数の対象文字に指定した位置の文字列を取り出すMid【ミッド】関数を使用して変数「変換文字」に格納されている文字列の変数「i」番目の文字列を取り出してvbNarrow【ブイビーナロー】で半角文字に変換しています。ここでは、ひらがなや漢字は半角に変換できないので半角にはなりません。


12~13行目
【If Asc(半角) >= 32 And Asc(半角) <= 126 Then _
変換文字 = WorksheetFunction.Replace(変換文字, i, 1, 半角)】

If文(条件分岐)でAsc【アズキー】関数を使用して文字コードを取得します。文字コードを取得する文字は11行目で半角変数に格納した文字を半角にした英数カナを含むすべての文字です。半角英数の文字コードは32~126で取得した文字コード内に含まれるかつまり、半角変数に格納されている文字が半角英数なのかを判断しています。半角英数だった時は、ワークシート関数のコンテナ(入れ物)を表すWorksheetFunction【ワークシートファンクション】オブジェクトのReplase【リプレイス】メソッドを使用して、条件に一致した文字のすべてを半角に置換えして変換文字変数に代入しています。この時点で変数「変換文字」の中には、選択範囲内の英数が半角で、カタカナ、ひらがな、漢字が全角の文字列が格納されています。


15行目【セル = 変換文字】
変数「セル」の中身はA1セルから始まる表範囲で1行目の見出し行を除いた範囲のセルに変換文字変数を代入することで表範囲の文字列を半角英数、全角漢字ひらがなカタカナに書き換えています。

WorksheetFinction【ワークシートファンクション】オブジェクトのReplase【リプレイス】メソッドの書式

WorksheetFinction.Replase(文字列,開始位置,文字数,置換文字列)


  • 第一引数「文字列」は置換の対象となる文字列を指定
  • 第二引数「開始位置」は検索する文字列を指定
  • 第三引数「文字数」は置換える文字列の個数を指定
  • 第四引数「置換文字列」置換える文字列を指定

以上で、英数字を半角にカタカナを全角に統一する方法の解説を終了します。
ありがとうございました。

スポンサーリンク

関連記事・広告