セル内の全角の英数字と記号を半角に変換します。
セルごと変換する方法では文字単位の書式がリセットされますが、このマクロでは維持します。また、ASC
関数ではカタカナも半角になりますが、このマクロでは処理の対象外にします。
マクロコード
セル内の全角文字を半角にする関数
'引数 rngOrg : 1セルのRange
Function f_NarrowChar(rngOrg As Range)
Dim cntChr As Long, i As Long
'数式、文字列型以外の値は対象外
If rngOrg.HasFormula Then Exit Function
If VarType(rngOrg.Value) <> vbString Then Exit Function
'1文字ずつ半角化
cntChr = rngOrg.Characters.Count
For i = 1 To cntChr
With rngOrg.Characters(i, 1)
Select Case .Text
Case "ァ" To "ヶ", "ー"
Case Else
.Text = StrConv(.Text, vbNarrow)
End Select
End With
Next i
End Function
呼び出し元のサンプル
Public Sub シート内の文字を半角化()
Dim aCell As Range
For Each aCell In ActiveSheet.UsedRange.Cells
f_NarrowChar aCell
Next aCell
End Sub
関数のコード解説
1セルのRangeを引数に持つ関数です。
1文字ずつ処理して書式を維持
Range.Characters(i, 1).Text
で1文字範囲の取得・変更が可能なおかけでこのマクロは成立しています。Range.Text
でしか取得・変更できないオブジェクトでは、文字単位の書式が維持できません。
StrConv(.Text, vbNarrow)
で、現在の1字を半角に変換します。半角化できないものは同じ文字が返ります。
カタカナを除外
全角カタカナは”ァ”~”ヶ”(全角小文字)の範囲と”ー”(長音記号)なのでこれを除外します。ちなみに半角の”ヶ”はありませんが、まとめて指定して問題ありません。
文字書式の維持が不要な場合はこちらをどうぞ。カタカナも処理できます。