重複がある住所等のExcelデータをデータクリーニング(名寄せ)したいときに。VBAで関数を定義すれば一括変換できる。
目次
問題:促音・拗音を直音に一括変換したい
Excel内の文字列データの促音・拗音(ァィゥェォャュョッ)※と直音(アイウエオヤユヨツ)の表記ゆれを一括で修正したい。
※捨て仮名、半音とも
表記ゆれの何が問題かというと、以下の例のように人間には同じ住所だろうと判断できるが、機械的に処理すると全く別のものとして扱われてしまい重複データとして保持されてしまう。データに重複がある状態で保持し続けてしまうとビジネスやデータ活用に支障が出てしまう。不特定多数のユーザーから入力を受け付けるようなケースではどうしてもこういったデータは発生してしまうので、定期的にデータクリーニング(名寄せ)すべきである。
表記ゆれの例
下記を同じデータとして扱いたいときに、促音・拗音を直音(あるいはその逆)に統一する必要がある。
○○県△△市□丁目◇番地▲グレンディオ101
○○県△△市□丁目◇番地▲グレンデイオ101
解決方法:VBAで関数を定義する
残念ながらExcelに促音から直音へ変換する関数はないのでVBAで関数を定義して、メインのVBAコードから呼び出して使用する。
読み込んだセルの文字列を1文字ずつAsc()
で文字コードに変換し、各促音に対応する文字コードに合致するかチェックし、その直音に相当する文字コードを文字にChr()
で置き換えている。
Private Function CleansingAddress(ByVal strCell As String) As String
Dim i As Long
Dim lngCharCode As Long
' セル内の文字を半角に統一する
strCell = StrConv(strCell, vbNarrow)
' セル内の文字を頭から1文字ずつ促音の有無をチェックする
For i = 1 To Len(strCell)
lngCharCode = Asc(Mid(strCell, i, 1))
' 各促音の文字コードに一致するものがあれば直音に変換する
Select Case lngCharCode
Case 167 To 171 'ァ~ォ
Mid(strCell, i, 1) = Chr(lngCharCode + 10)
Case 172 To 174 'ャ~ョ
Mid(strCell, i, 1) = Chr(lngCharCode + 40)
Case 175 ' ッ
Mid(strCell, i, 1) = Chr(194)
End Select
Next
' セル内の文字を全角に戻す
strCell = StrConv(strCell, vbWide)
CleansingAddress = strCell
End Function
コメント