Excel VBA 文字列中の半角カナを全角カナに変換 | toshiのブログ

toshiのブログ

日頃、科学技術について調査していることや趣味でやっていることなどを紹介していきます。

pathに半角カナが含まれていたら化けることがあったので、半角カナを全角に変換する関数を作成しました。

 

仕様
文字列の中に半角カナがあれば、左記半角カナを全角カナに変換する
入力: str
出力: halfKana2fullKana
例  わたしはガキンチョです  →  わたしはガキンチョです

 

Function halfKana2fullKana(str As String) As String

'仕様
'文字列の中に半角カナがあれば、左記半角カナを全角カナに変換する
'入力: str
'出力: halfKana2fullKana
'例  わたしはガキンチョです  →  わたしはガキンチョです

Dim sp       As Long    '文字のポインタ
Dim sLen     As Long    '文字列長さ
Dim moji1    As String  '切り出した文字
Dim moji2    As String  '切り出した文字
Dim ascMoji1 As Long
Dim ascMoji2 As Long
Dim output   As String
Dim flag     As Long

If str = "" Then
  halfKana2fullKana = ""
  Exit Function
End If

sLen = Len(str)

'---- 初期化
output = ""
sp = 1

Do
  flag = 0
 
  '---- ポインタ位置から2文字が、2文字半角カナ(濁点、半濁点)ならば全角化する
  If sp <= sLen - 1 And 2 <= sLen Then
    moji1 = Mid(str, sp, 1)                                          '文字の切り出し
    moji2 = Mid(str, sp + 1, 1)
    ascMoji1 = AscW(moji1)                                           'UTFコードを取得
    ascMoji2 = AscW(moji2)                                           'UTFコードを取得
    If &HFF61 <= ascMoji1 And ascMoji1 <= &HFF9D And (ascMoji2 = &HFF9E Or ascMoji2 = &HFF9F) Then '濁点、半濁点付きの半角カナならば
      output = output & StrConv(moji1 & moji2, vbWide)               '2文字を1文字と判断して全角に変換して結合
      flag = 1
      sp = sp + 2
    End If
  End If
  
  '---- 選択文字が、1文字半角カナならば全角化する
  If flag = 0 Then
    moji1 = Mid(str, sp, 1)                                          '文字の切り出し
    ascMoji1 = AscW(moji1)                                           'UTFコードを取得
    If &HFF61 < ascMoji1 And ascMoji1 < &HFF9F Then                  '半角カナならば
      output = output & StrConv(moji1, vbWide)                       '全角に変換して結合
      flag = 1
      sp = sp + 1
    End If
  End If
    
  '---- その他の文字なら、そのまま結合
  If flag = 0 Then
    moji1 = Mid(str, sp, 1)                                          '文字の切り出し
    output = output & moji1
    sp = sp + 1
  End If
  
  If sLen < sp Then Exit Do
Loop

halfKana2fullKana = output

End Function