#108 | テキストボックスに入力された半角カタカナを全角にする方法 | フォーム、VBA | |
テキストボックスの"定型入力プロパティ"に"K"または"k"という文字を指定すると、そのテキストボックスからは全角カタカナ・全角数字・全角記号しか入力できないようになります。しかし、カタカナだけでなく、数字や記号も全角で入力しなければなりませんし、それ以外の文字が入力されると定型入力に従っていない旨のエラーメッセージが表示されてしまいます。 また、"IME入力モードプロパティ"に「全角カタカナ」を指定することによって、テキストボックスにフォーカスが移動すると自動的にIME入力モードが全角カタカナになります。確かに入力はしやすくなりますが、半角カタカナを全角カタカナに自動的に変換してくれるわけではありませんし、IMEを操作すれば半角カタカナも入力できてしまいます。 そこで、テキストボックスの"更新後処理イベントプロシージャ"を使って、この自動変換を行ってみます。 モジュールを使うとなると、文字変換のための組み込み関数としてStrConv関数を思い出しますが、この関数は定型入力プロパティの"K"や"k"と同様にすべての文字を全角に変換することしかできません。 例: Debug.Print StrConv("abcdエービーシーディー", vbWide) → abcdエービーシーディー
そこで、半角カタカナだけを全角に変換するという仕様で、1文字ずつASCIIコードをチェックしながら変換していくことにします。次のコードは、その機能をFunctionプロシージャとしてまとめたものです。 サンプルプロシージャ: Function ChangeKatakana(strTextData As String) As String
半角カタカナを1文字ずつ変換するのではなく、カタカナのまとまりを取り出してから一括して変換するというややこしいやり方をしているのは、バビブベボのような濁音などをうまく処理させるためです。全角では「バ」で1文字ですが、半角の場合は「ハ」と「"」の2文字になっています。それぞれは全角に変換できても、まとめて「バ」に変換させるためには2文字を一括してStrConv関数に渡さなければなりません。Dim strRet As String Dim strWrkKana As String Dim strTmpChar As String Dim intTmpAsc As Integer Dim blnKanaflg As Boolean Dim iintLoop As Integer strRet = "": strWrkKana = "" '文字列を1文字ずつチェックするループ For iintLoop = 1 To Len(strTextData) '1文字分を取り出します strTmpChar = Mid$(strTextData, iintLoop, 1) 'その1文字のASCIIコードを調べます intTmpAsc = Asc(strTmpChar) If intTmpAsc >= 161 And intTmpAsc <= 223 Then '半角カタカナのとき strWrkKana = strWrkKana & strTmpChar blnKanaflg = True Else If Not blnKanaflg Then strRet = strRet & strTmpChar Else '半角カタカナの文字列を一括して変換します strRet = strRet & StrConv(strWrkKana, vbWide) & strTmpChar strWrkKana = "" blnKanaflg = False End If End If Next iintLoop If blnKanaflg Then strRet = strRet & StrConv(strWrkKana, vbWide) End If ChangeKatakana = strRet End Function 使用例: |
|||
|
Copyright © T'sWare All rights reserved |