英数字を半角/カタカナを全角にするユーザー定義関数

複数のシートを統合したら全角・半角が入り乱れてしまった、というのはよくある例です。そうなると、単に見にくいだけでなく、別の値になってしまうのでデータとしても問題です。

全角・半角を変換するASC関数とJIS関数がありますが、すべてを全角または半角になってしまうのが難点です。せっかく揃えるなら、英数字・記号は半角、カタカナは全角で見やすく扱いやすくしたいのです。

全角半角1

そこで、このユーザー定義関数を使います。関数としてセルの数式に使うほか、マクロから呼び出して値を書き換える使い方もできます。

英数字の半角化、カタカナの全角化する関数

Function uf_半角全角を最適化(RNG As Range) As String

    Dim txtVal As String, txtNew As String
    Dim buf As String
    Dim max As Long, i As Long

    '文字列型以外はそのままの値を返す
    If VarType(RNG.Value) <> vbString Then
        uf_半角全角を最適化 = RNG.Value
        Exit Function
    End If
    'すべて全角に
    txtVal = StrConv(RNG.Value, vbWide)
    'カタカナ以外を半角に
    max = Len(txtVal)
    For i = 1 To max
        buf = Mid(txtVal, i, 1)
        Select Case buf
            Case "ァ" To "ヶ", "ー"
                txtNew = txtNew & buf
            Case Else
                txtNew = txtNew & StrConv(buf, vbNarrow)
        End Select
    Next i

    uf_半角全角を最適化 = txtNew
End Function

まず、StrConv関数(引数vbWide)で一律で全角化します。半角カナの濁音(ガ → ガ など)をはじめに統合しておく意図もあります。

次に、1字ずつ判定し、全角カナ以外をStrConv関数(引数vbNarrow)で半角化します。漢字やひらがなは半角化できないので元の文字が帰ります(エラーにもなりません)。

全角カナは”ァ”~”ヶ”(全角小文字)の範囲と”ー”(長音)で特定できます。ちなみに半角の”ヶ”はありませんが、まとめて指定して問題ありません。

ユーザー定義関数の2通りの利用方法

セル数式にユーザー定義関数として利用する

=uf半角全角を最適化(参照セル) のように入力します。JIS関数やASC関数と同様です。

全角半角2

マクロから呼び出して値を置換する

入力値を一括で書き換えるマクロです。テキストの処理で上記の関数を使っています。

Public Sub 全角半角の一括調整()

    Dim aCell As Range
    Dim txtNew As String

    For Each aCell In ActiveSheet.UsedRange.Cells
        '数式セルは処理しない
        If aCell.HasFormula = False Then
            txtNew = uf_半角全角を最適化(aCell)
            If aCell.Value <> txtNew Then
                aCell.Value = txtNew
            End If
        End If
    Next aCell

End Sub

現在のセルのテキストが、ユーザー定義関数で処理したテキストが異なっている場合に、セルの値を書き換えます。

この方法は、セルの値ごと書き換えるため、文字単位の書式はリセットされます。文字単位の書式を維持したい場合は、こちらをどうぞ。

タイトルとURLをコピーしました