複数のシートを統合したら全角・半角が入り乱れてしまった、というのはよくある例です。そうなると、単に見にくいだけでなく、別の値になってしまうのでデータとしても問題です。
全角・半角を変換するASC
関数とJIS
関数がありますが、すべてを全角または半角になってしまうのが難点です。せっかく揃えるなら、英数字・記号は半角、カタカナは全角で見やすく扱いやすくしたいのです。
そこで、このユーザー定義関数を使います。関数としてセルの数式に使うほか、マクロから呼び出して値を書き換える使い方もできます。
英数字の半角化、カタカナの全角化する関数
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
関数と同様です。
マクロから呼び出して値を置換する
入力値を一括で書き換えるマクロです。テキストの処理で上記の関数を使っています。
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
現在のセルのテキストが、ユーザー定義関数で処理したテキストが異なっている場合に、セルの値を書き換えます。
この方法は、セルの値ごと書き換えるため、文字単位の書式はリセットされます。文字単位の書式を維持したい場合は、こちらをどうぞ。