半角カタカナだけ全角に変換
                                       玄関へお回り下さい。
半角のカタカナだけを全角に変換する(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文字をまとめて変換(濁点処理不要)




2002/05/12