|
こもれびです
おまたせしました。
サンプルソースができましたので、お試しください。
スペースですが、文字列中のスペースを前後の文字種によって変換することは
やってできないことは無いのですが、今以上に複雑になりそうです。
作製した混在変換関数では半角スペースは半角スペース、全角スペースは
全角スペースで出力します。
こちらでの試験では、ランダムに混在している文字列が規則にのっとって
変換されて戻り値として返ってきました。
関数中の文字列保存用配列の大きさは50文字(0〜49)としています。
大きさが足りないときは、「OutStr」変数の配列上限の49という数字を
適宜変更してください。
下記リストの作製したサンプルは、フォームに設けた「txtstr」という名前の
テキストボックスに入力された文字列を、「CmdKonzai」という名前の
コマンドボタンをクリックした時のイベントプロシージャで標準モジュールの「KonzaiConv」関数を呼び、関数の戻り値(変換した文字列)を「TxtAns」という名前のテキストボックスに入れています。
Private Sub CmdKonzai_Click()
Me!TxtAns.Value = KonzaiConv(Me!txtstr.Value)
End Sub
標準モジュールに次のFunctionモジュールを作成してください。
Public Function KonzaiConv(KonzaiStr) As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim OutStr(1, 49) As String
Dim h1 As String
Dim HenkanData As String
HenkanData = KonzaiStr
HenkanData = Trim(HenkanData)
i = Len(HenkanData)
j = 1
Do Until j > i
h1 = Mid(HenkanData, j, 1)
If Val("&H" & Hex(AscB(MidB(h1, 2, 1))) & Hex(AscB(MidB(h1, 1, 1))) & "&") > Val(&H7F&) Then
If Val("&H" & Hex(AscB(MidB(h1, 2, 1))) & Hex(AscB(MidB(h1, 1, 1))) & "&") > Val(&H30F6&) Then
If Val("&H" & Hex(AscB(MidB(h1, 2, 1))) & Hex(AscB(MidB(h1, 1, 1))) & "&") > Val(&HFF5A&) Then
If i > j Then
If Asc(Mid(HenkanData, j + 1, 1)) = Val(&HDE&) Or Asc(Mid(HenkanData, j + 1, 1)) = Val(&HDF&) Then
j = j + 1
h1 = h1 & Mid(HenkanData, j, 1)
End If
End If
h1 = StrConv(h1, vbWide)
OutStr(1, k) = h1 ' 半角カタカナ
Else
h1 = StrConv(h1, vbNarrow)
OutStr(1, k) = h1 ' 2byte alpha
End If
Else
OutStr(0, k) = h1 ' ひらがな,カタカナ(全角)
End If
Else
OutStr(0, k) = h1 ' 1byte ASCII
End If
j = j + 1: k = k + 1
Loop
For l = 0 To k
KonzaiConv = KonzaiConv & OutStr(0, l)
KonzaiConv = KonzaiConv & OutStr(1, l)
Next
End Function
|
|