文字列データに混ざっている半角カタカナを全角カタカナに変更するユーザー定義関数のサンプルプログラムを覚書。
記事ではExcelを使用していますが、基本的にはAccessのVBAなどでも同じように使用できます。
カタカナだけが対象なのでアルファベットや記号は変更されません。
アルファベットなども変換したい場合
この記事のサンプルプログラムは、カタカナだけが対象となります。
もしアルファベット、数値、記号は、全部半角、カタカナは全角に変換したい場合は、以下の記事を参照してください。
サンプルプログラム概要
ユーザー定期関数なので引数として変換対象の文字列を受け取ります。
引数として受け取った文字列データを1文字ずつ取り出して半角カタカナかどうかを調べます。
半角カタカナかどうかを調べる方法としては、取り出した1文字のASCIIコード番号がが半角カタカナのASCIIコード範囲内の番号かどうかで判断しています。
もし半角カタカナだったら全角カタカナに変換し、半角カタカナでなければ何もせずに別で用意した空の文字列変数に代入します。
別に用意した変数に代入する際は、前の値を保持しつつ代入(順番にくっつけていく)して元の文字列の半角カタカナを全角カタカナに変換した文字列を新たに作りなおすイメージです。
ユーザー定義関数のサンプルプログラム
以下に半角カタカナを全角カタカナに変更するユーザー定義関数のサンプルプログラムを記述する。
以下のコードを標準モジュールに貼り付けるます。
Public Function SBCStoDBCS(S As String) As String
Dim strTemp As String, S1 As String, S2 As String
Dim sWide As String
strTemp = S
Do While Len(strTemp) > 0
S1 = Left(strTemp, 1)
If Asc(S1) >= 161 And Asc(S1) <= 221 Then
If Len(strTemp) > 1 Then
S2 = Mid(strTemp, 2, 1)
If Asc(S2) = 222 Or Asc(S2) = 223 Then
S1 = Left(strTemp, 2)
strTemp = Right(strTemp, Len(strTemp) - 1)
End If
End If
S1 = StrConv(S1, vbWide)
End If
sWide = sWide & S1
strTemp = Right(strTemp, Len(strTemp) - 1)
Loop
SBCStoDBCS = sWide
End Function
ユーザー定義関数の使い方
作成したユーザー定義関数の使い方の例を以下に記載します。
Excelで使用する場合
ワークシートのセルに式として =SBCStoDBCS("変換したい文字列") と入力すればOKです。
"変換したい文字列"部分は文字列が入ったセル番地を指定してもOKです。
例えば、=SBCStoDBCS(A1) という感じです。
もちろんVBAのプログラム中から呼び出して使用することも可能です。
Accessで使用する場合
Accessのクエリーなどで使用する場合は、式として SBCStoDBCS([フィールド名]) で良いです。
Excelで使用する場合と同様に標準の組み込み関数と同じように使用することができます。
コメント