半角カタカナだけ全角に変換 |
半角のカタカナだけを全角に変換する(2サンプル) (049) | |
初めのサンプルは、私が作ったサンプルです。その次のサンプルはゆう(U)さんから投稿頂いたものです。 初心者と上級者の違いと言うか、一工夫の違いでこれだけ変わるという、サンプルでもあります。 皆さんも作成される時は、もう一工夫ということでこの下手なサンプルもこのまま載せておきます。 ※ 表記中の 赤字 の部分は実際は半角文字です。 |
|
半角を全角に変換するだけなら Zenkaku=StrConv(Hankaku,vbWide)で簡単に出来るのですが 英数は全角にしたくない場合、 1文字づつ変換する必要があり ます。 又、濁点や半濁点の処理もしないと ウ" のような文字に変換されます 自作 HantoZen() 関数を作成する Option Explicit 'SampleNo=049 WindowsXP VB6.0(SP5) 2002.05.12 Private Function HantoZen(ByRef MyStr As String) As String Dim Zenkaku As String Dim Henkango As String Dim mozi As String Dim i As Integer Dim n As Integer Dim Table1(1 To 2) As String Dim Table2(1 To 2) As String Dim Table3(1 To 2) As String Table1(1) = "゛" Table1(2) = "゜" Table2(1) = "ウカキクケコサシスセソタチツテトハヒフヘホ" Table2(2) = "ハヒフヘホ" Table3(1) = "ヴガギグゲゴザジズゼゾダヂヅデドバビブベボ" Table3(2) = "パピプペポ" '一度半角カナを全角に変換 For i = 1 To Len(MyStr) mozi = Mid$(MyStr, i, 1) '161= 。「」 〜223=ン ゛ ° までの半角文字 If Asc(mozi) >= 161 And Asc(mozi) <= 223 Then mozi = StrConv(mozi, vbWide) Else mozi = mozi End If Zenkaku = Zenkaku & mozi Next i '濁点・半濁点の処理 '変換後の "゛" と "゜" を探しあれば 'その前の文字をTable2(1)から探しTable3(1) 'の文字に置き換える For i = 1 To Len(Zenkaku) mozi = Mid$(Zenkaku, i, 1) If mozi = "゛" Then '濁点処理 mozi = Mid$(Zenkaku, i - 1, 1) n = InStr(Table2(1), mozi) mozi = Mid$(Table3(1), n, 1) Henkango = Mid$(Henkango, 1, Len(Henkango) - 1) & mozi ElseIf mozi = "゜" Then '半濁点処理 mozi = Mid$(Zenkaku, i - 1, 1) n = InStr(Table2(2), mozi) mozi = Mid$(Table3(2), n, 1) Henkango = Mid$(Henkango, 1, Len(Henkango) - 1) & mozi Else Henkango = Henkango & mozi 'そのままつなぐ End If Next i HantoZen = Henkango End Function '文字列 "abc123アイウエオ" のカタカナ半角だけを全角に変換します。 Private Sub Command1_Click() Label1.Caption = HantoZen("abc123アイウエオガギパ") End Sub |
|
ゆう(U)さんから投稿頂いた上記と同じ処理をするサンプルです | |
'================================================= '半角カナだけを全角カナ変換する関数 fKanaHan2Zen '================================================= ' result = fKanaHan2Zen(myString) ' 引数 myString :変換元の文字列 ' 戻値 result :変換後の文字列 ゆう(U)さん投稿分 '------------------------------------------------- Private Function fKanaHan2Zen(ByRef myString As String) _ As String Dim i As Long Dim strTemp As String Dim strKana As String Dim chrKana As String For i = 1& To Len(myString) chrKana = Mid$(myString, i, 1&) Select Case Asc(chrKana) Case 166 To 223 '半角が続いたら文字をつなぐ strKana = strKana & chrKana Case Else '全角文字になったら半角の未処理文字を全部全角 'に変換これにより濁点処理等が不要 If Len(strKana) > 0& Then strTemp = strTemp & StrConv(strKana, vbWide) strKana = vbNullString End If strTemp = strTemp & chrKana End Select Next i '最後の文字が半角の場合の処理 If Len(strKana) > 0& Then strTemp = strTemp & StrConv(strKana, vbWide) End If fKanaHan2Zen = strTemp End Function '文字列 "abc123アイウエオ" のカタカナ半角だけを全角に変換します。 Private Sub Command2_Click() Label1.Caption = fKanaHan2Zen("abc123アイウエオガギパ") End Sub 文字列を1文字づつ半角か全角かを調べて、半角ならStrConv() 関数で全角に変換するのは同じですが、文字列の中に半角がつづいたら、その文字列を変換せずつなぎ、半角で無くなった時点で全角に変換するところが、一工夫されているところです。 私の場合 カ と ゛ を別々に変換しカ゛の処理を別にしている ゆう(U)さんの場合 ガ の2文字をまとめて変換(濁点処理不要) |