VBA共通:データに混ざっている半角カタカナを全角カタカナに変換するユーザー定義関数

文字列データに混ざっている半角カタカナを全角カタカナに変更するユーザー定義関数のサンプルプログラムを覚書。

記事ではExcelを使用していますが、基本的にはAccessのVBAなどでも同じように使用できます。

カタカナだけが対象なのでアルファベットや記号は変更されません。

もしアルファベット、数値、記号は、全部半角、カタカナは全角に変換したい場合は、別の記事「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で使用する場合と同様に標準の組み込み関数と同じように使用することができます。

スポンサードリンク

  

関連記事