パスワードを忘れた? アカウント作成
175686 journal

black-holeの日記: Excel/VBA入門: セルの全角英数字を半角に変換し、半角カナを全角に変換する。

日記 by black-hole

とりあえず、表題の通り。
使い方の異なる Functionプロシージャーと Subプロシージャーの二つを作成。
詳細はコードのコメントを参照。

Function ToHankaku(ByVal src As String) As String
    '
    ' 文字列中の半角変換可能な文字を半角に変換する。
    ' ただし、半角片仮名文字(0xA1-0xCF)は全角に変換する。
    ' このとき、可能であれば半角・全角片仮名文字と直後の濁点・半濁点が合成される。
    '
    ' 2009/12/17 black-hole: 新規作成
    '
    '
    Dim re As Object
    Dim Match As Object
 
    '
    ' 正規表現オブジェクトを作成
    '
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "[。-゚]+"   ' 1文字以上の半角片仮名
    re.Global = True        ' 検索範囲はグローバル
 
    '
    ' 半角変換可能な文字を全て半角に変換
    ' 全角片仮名文字もいったん半角片仮名に変換される。
    '
    src = StrConv(src, vbNarrow)
 
    '
    ' 1文字以上の半角カナを検索し全角に変換
    ' 半角片仮名文字の直後に濁点・半濁点があればここで合成される。
    '
    For Each Match In re.Execute(src)
        src = Replace(src, Match, StrConv(Match, vbWide), , 1)
    Next
 
    ToHankaku = src  ' 返り値
 
End Function

Sub SelToHankaku()
    '
    ' 選択されたセル範囲について、文字列中の半角変換可能な文字を半角に変換する。
    ' ただし、半角片仮名文字(0xA1-0xCF)は全角に変換する。
    ' このとき、可能であれば半角・全角片仮名文字と直後の濁点・半濁点が合成される。
    '
    ' 2009/12/17 black-hole: 新規作成
    '
    '
    Dim re As Object
    Dim Cell As Range
    Dim Match As Object
    Dim Str As String
 
    '
    ' 正規表現オブジェクトを作成
    '
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "[。-゚]+"   ' 1文字以上の半角片仮名
    re.Global = True        ' 検索範囲はグローバル
 
    '
    ' 選択されたセル範囲について、以下の処理を実行
    '
    For Each Cell In Selection
 
        Str = Cell.Value
        If Str <> "" Then
 
            '
            ' 半角変換可能な文字を全て半角に変換
            ' 全角片仮名文字もいったん半角片仮名に変換される。
            '
            Str = StrConv(Str, vbNarrow)
 
            '
            ' 1文字以上の半角カナを検索し全角に変換
            ' 半角片仮名文字の直後に濁点・半濁点があればここで合成される。
            '
            For Each Match In re.Execute(Str)
                Str = Replace(Str, Match, StrConv(Match, vbWide), , 1)
            Next
            Cell.Value = Str
 
        End If
 
    Next
 
End Sub

以上

-- 2010/09/25 題名とトピックを修正 --

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

読み込み中...