Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9870 / 9994 ←次へ | 前へ→

【3259】Re:文字の形態別に全半角の変換を変える
回答  こもれび  - 04/8/18(水) 16:07 -

引用なし
パスワード
   こもれびです 

おまたせしました。
サンプルソースができましたので、お試しください。
スペースですが、文字列中のスペースを前後の文字種によって変換することは
やってできないことは無いのですが、今以上に複雑になりそうです。
作製した混在変換関数では半角スペースは半角スペース、全角スペースは
全角スペースで出力します。
こちらでの試験では、ランダムに混在している文字列が規則にのっとって
変換されて戻り値として返ってきました。

関数中の文字列保存用配列の大きさは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

287 hits

【3207】文字の形態別に全半角の変換を変える べる 04/8/12(木) 20:27 質問
【3208】Re:文字の形態別に全半角の変換を変える こもれび 04/8/13(金) 11:14 発言
【3239】Re:文字の形態別に全半角の変換を変える べる 04/8/16(月) 13:03 質問
【3241】Re:文字の形態別に全半角の変換を変える こもれび 04/8/16(月) 13:21 回答
【3249】Re:文字の形態別に全半角の変換を変える こもれび 04/8/17(火) 15:49 発言
【3252】Re:文字の形態別に全半角の変換を変える べる 04/8/17(火) 17:36 質問
【3259】Re:文字の形態別に全半角の変換を変える こもれび 04/8/18(水) 16:07 回答
【3262】Re:文字の形態別に全半角の変換を変える べる 04/8/18(水) 17:57 質問
【3264】Re:文字の形態別に全半角の変換を変える こもれび 04/8/18(水) 22:20 回答
【3266】Re:文字の形態別に全半角の変換を変える こもれび 04/8/18(水) 23:49 発言
【3275】Re:文字の形態別に全半角の変換を変える べる 04/8/19(木) 11:55 質問
【3276】Re:文字の形態別に全半角の変換を変える こもれび 04/8/19(木) 12:22 発言
【3279】Re:文字の形態別に全半角の変換を変える べる 04/8/19(木) 13:39 お礼

9870 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078325
(SS)C-BOARD v3.8 is Free