この記事でわかること
テーブルやデータベース上の検索をするとき、入力規則が守られていない(表記ゆれ)が存在すると、思わぬ集計漏れなどが発生して正確な分析・解析ができなくなります。
かといって、すべて目で確認して修正するなんて難しいです。
本記事では、半角カタカナと全角カタカナで書かれたデータを全角カタカナに統一するVBAコード(関数)を知ることができます。
完成コード
'**
'* 半角カナを全角カナに変換する関数
'* 引数1:txt {String型} 変換したい文字列を指定
'* 戻り値:{String型} 半角カタカナを全角カタカナに直した文字列
'**
Function Conv_HalfKana_To_FullKana(ByVal txt As String) As String
Dim i As Long
For i = 1 To Len(txt)
Dim char As String: char = Mid(txt, i, 1)
Dim charCode As Long: charCode = AscW(char)
Dim tmpTxt As String
Dim result As String
If charCode >= &HFF61 And charCode <= &HFF9F Then
tmpTxt = tmpTxt & char
Else
If tmpTxt <> "" Then
result = result & StrConv(tmpTxt, vbWide)
tmpTxt = ""
End If
result = result & char
End If
Next i
If tmpTxt <> "" Then result = result & StrConv(tmpTxt, vbWide)
Conv_HalfKana_To_FullKana = result
End Function
使い方
上記コードは標準モジュールに入れておけば、プロシージャ内はもちろん、ワークシート関数として呼び出して使うことも可能です。
プロシージャ内で使用する方法
Sub TestCode()
Dim txt As String
txt = "アイウエオガギグゲゴパピプペポ。、アーア"
Sheet1.Range("B1").Value = Conv_HalfKana_To_FullKana(txt)
End Sub
ワークシート関数として使用する方法
=Conv_HalfKana_To_FullKana(A1)
コード解説
半角カタカナを全角カタカナに修正する方法として、ワークシート関数【JIS】を使う方法もあります。
ただ、この方法はフリガナなど、カタカナだけで構成されたセルで有効ですが、英数字が混ざった文字列であると、英数字も全角になってしまいます。
また、VBAでも【StrConv】という便利な関数が存在します。
こちらは第1引数に変換したい文字列、第2引数に変換したい定数を指定することで変換することが可能です。
- vbWide
- 半角文字を全角文字に変換
- vbNarrow
- 全角文字を半角文字に変換
ただ、この関数を使っても、半角カタカナだけを、全角カタカナに変換することができない仕様となっていますので、使うにはちょっとした工夫が必要です。
完成コードでやっていることは、一文字ずつ半角カタカナであるか判定し、半角カタカナである場合は一時的な変数に格納してから全角変換処理をする思想となっています。
変数【tmpTxt】にわざわざ格納する必要があるのか?と思われるかもしれません。
これは、一文字ずつ変換して変数【result】に入れてしまうと、二文字で一つの全角文字(濁点「がぎぐげご」、半濁点「ぱぴぷぺぽ」など)というケースでおかしな結果になってしまうためです。
解説ありコード
'文字数だけFor~Next(ループ処理)
Dim i As Long
For i = 1 To Len(txt)
'Mid関数で一文字ずつ抜き出す
Dim char As String: char = Mid(txt, i, 1)
'AscW関数で文字コードを調べる
Dim charCode As Long: charCode = AscW(char)
Dim tmpTxt As String '半角カタカナを一時的に入れる変数
Dim result As String '変換結果を一時的に入れる変数
'半角カタカナの場合
If charCode >= &HFF61 And charCode <= &HFF9F Then
'tmpTxtに文字を追加していく
tmpTxt = tmpTxt & char
'半角カタカナでない場合
Else
If tmpTxt <> "" Then
'tmpTxtの半角カタカナを全角カタカナに変換し、resultに格納、初期化する
result = result & StrConv(tmpTxt, vbWide)
tmpTxt = ""
End If
'変換せずにresultに文字を追加する
result = result & char
End If
Next i
使用例
このコードは、表記ゆれを直すときに使っています。
住所など英数字、記号は半角に、カタカナは全角に直すというコードを書きたい時に以下のようなコードを書いて使います。
Sub 表記ゆれ修正()
Dim buf As Variant
Dim cnt As Long: cnt = 0
ReDim outArr(1 To 1) As Variant
For Each buf In Sheet1.Range("A1").CurrentRegion.Cells
cnt = cnt + 1
ReDim Preserve outArr(1 To cnt)
Dim result As String: result = buf.Value
result = StrConv(result, vbNarrow)
result = WorksheetFunction.Trim(result)
result = Conv_HalfKana_To_FullKana(result)
outArr(cnt) = result
Next buf
Sheet1.Range("C1").Resize(UBound(outArr), 1).Value = WorksheetFunction.TransPose(outArr)
End Sub
はじめに、StrConv関数のvbNarrowを使い、すべて半角文字に変換します。
次にワークシート関数のTrimを使い、余分な空白を整えます。
最後に今回紹介した半角カタカナを全角カタカナに変更するコードを使い、全角カタカナに修正するというプロセスになっています。