和風スパゲティのレシピ

日本語でコーディングするExcelVBA

半角英数はそのままに半角カナを全角カナに変換する

文字列中の半角カナを全角カナに変換する場合は、
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を命名しておくと、

strconvからの選択肢
このようにCtrl+Spaceの選択肢で並んでくれて便利です。

気に入ったらこの命名規則を採用してみて下さい。