全角の英数字・記号を半角に置換する(文字書式を維持)

セル内の全角の英数字と記号を半角に変換します。

セルごと変換する方法では文字単位の書式がリセットされますが、このマクロでは維持します。また、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字を半角に変換します。半角化できないものは同じ文字が返ります。

カタカナを除外

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

 

文字書式の維持が不要な場合はこちらをどうぞ。カタカナも処理できます。

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