文字列中の半角カナを全角カナに変換する場合は、
StrConv関数を使用し、半角を全角にする引数vbWideを指定します。
しかしこのvbWideはすべての半角文字を全角文字にしてしまうため、
半角英字や半角数字まですべて全角になってしまいます。
これを回避し、半角カナだけを全角カナにする方法を紹介します。
ソースコード
半角英数をそのままに半角カナを全角カナに変換するには、
以下のコードを実行します。
' 半角カナ→全角カナ の変換関数 Function StrConv半角カナ→全角カナ(ByVal 元テキスト As String) As String ' 元のテキストを1文字ずつループ Dim n As Long Dim 第n文字 As String Dim 半角カナ部分 As String Dim 結果文字列 As String For n = 1 To Len(元テキスト) 第n文字 = Mid(元テキスト, n, 1) ' 第n文字が半角カナ ⇒ 変換対象に追加 If 第n文字 Like "[。-゚]" Then 半角カナ部分 = 半角カナ部分 & 第n文字 ' 第n文字が半角カナでない Else ' 変換対象があれば全角に変換して結果文字列に追加 If 半角カナ部分 <> "" Then 結果文字列 = 結果文字列 & StrConv(半角カナ部分, vbWide) 半角カナ部分 = "" End If ' 現在の文字を結果文字列に追加 結果文字列 = 結果文字列 & 第n文字 End If Next ' 元のテキストを1文字ずつループ ' 末尾の半角カナ部分を結果文字列に追加 If 半角カナ部分 <> "" Then 結果文字列 = 結果文字列 & StrConv(半角カナ部分, vbWide) 半角カナ部分 = "" End If StrConv半角カナ→全角カナ = 結果文字列 End Function
' 実行例 Sub A列内の半角カナを全角カナに変換する() Dim ws処理シート As Worksheet Set ws処理シート = Worksheets("○○") Dim 最終行 As Long 最終行 = ws処理シート.Cells(ws処理シート.Rows.Count, "A").End(xlUp).Row Dim R As Long For R = 2 To 最終行 ws処理シート.Cells(R, "A") = StrConv半角カナ→全角カナ(ws処理シート.Cells(R, "A")) Next End Sub
コードの解説
文字列中の半角カナを全角カナに変換する場合は、
StrConv関数を使用し、半角を全角にする引数vbWideを指定します。
しかしこのvbWideはすべての半角文字を全角文字にしてしまうため、
半角英字や半角数字まですべて全角になってしまいます。
これを回避するために、文字列を1文字ずつループして、
半角カナだけを全角変換し、それ以外の文字はそのまま結合しています。
半角カナは文字コード上で読点。から半濁音゜に連続して収録されていますので、
半角カナの判定はLike演算子で[。-゚]と比較することで行えます。
詳しくはこちらの記事をご覧ください。
また、「パ」のような濁音半濁音は2文字で全角1文字に変換する必要があります。
このため半角カナの変換は1文字ずつ行わず一旦変数に格納し、
連続する半角カナの部分ごとに変換を実行しています。
ワークシートでの活用
上記のようにこの関数の変換部分をFunctionとして作成しておけば、
ワークシート上でユーザー定義関数としても使えます。
この変換はシート関数としても良く欲しくなる処理なので、
ユーザー定義関数集に追加して活用しましょう。
おまけ:関数名について
今回のような既存関数をカスタマイズした関数を作った場合は、
「既存関数名+カスタマイズ内容」でFunctionを命名しておくと、
このようにCtrl+Spaceの選択肢で並んでくれて便利です。
気に入ったらこの命名規則を採用してみて下さい。