#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

  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
半角カタカナを1文字ずつ変換するのではなく、カタカナのまとまりを取り出してから一括して変換するというややこしいやり方をしているのは、バビブベボのような濁音などをうまく処理させるためです。全角では「バ」で1文字ですが、半角の場合は「ハ」と「"」の2文字になっています。それぞれは全角に変換できても、まとめて「バ」に変換させるためには2文字を一括してStrConv関数に渡さなければなりません。

使用例:
   ChangeKatakanaの実行例
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved