Access VBA質問箱 IV

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

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


2243 / 2272 ツリー ←次へ | 前へ→

【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 お礼[未読]

【3207】文字の形態別に全半角の変換を変える
質問  べる  - 04/8/12(木) 20:27 -

引用なし
パスワード
   初めまして。
簡単な質問で申し訳ありませんが、ご教授ください。

入力フォームの1つのフィールド内で文字の種類によって
英字 → 半角変換
カタカナ → 全角変換
ひらかな → 全角変換
にそれぞれ変換させたいのですが、
何か良い方法はありますでしょうか?
access2000で作成しています。
よろしくお願いいたします。

【3208】Re:文字の形態別に全半角の変換を変える
発言  こもれび  - 04/8/13(金) 11:14 -

引用なし
パスワード
   ▼べる さん:

>入力フォームの1つのフィールド内で文字の種類によって
>英字 → 半角変換
>カタカナ → 全角変換
>ひらかな → 全角変換

「1つのフィールド内」とありますが、これは例えば
一つのテキストボックスということなのでしょうか。
また、入力がテキストボックスだと仮定して入力される
文字列は「英字」と「カタカナ」と「ひらかな」が
混在しているということなのでしょうか?

「ひらがな」は通常全角でしか入力できないのではないか
と思いますので、「変換対象」から外してもよいのでは?

【3239】Re:文字の形態別に全半角の変換を変える
質問  べる  - 04/8/16(月) 13:03 -

引用なし
パスワード
   ▼こもれび さん:
>▼べる さん:
>
>>入力フォームの1つのフィールド内で文字の種類によって
>>英字 → 半角変換
>>カタカナ → 全角変換
>>ひらかな → 全角変換
>
>「1つのフィールド内」とありますが、これは例えば
>一つのテキストボックスということなのでしょうか。
>また、入力がテキストボックスだと仮定して入力される
>文字列は「英字」と「カタカナ」と「ひらかな」が
>混在しているということなのでしょうか?
>
>「ひらがな」は通常全角でしか入力できないのではないか
>と思いますので、「変換対象」から外してもよいのでは?


解かりにくい説明で申し訳ありません。
また、「ひらがな」は変換の必要はありませんでした。すみません。
「1つのフィールド内」は、一つのテキストボックスになり、
ここには、日本人や外国人の名前を記載通りに入力する必要がある為、
漢字、カナ、かな、英字など様々な文字が入力されるのですが、
英字 → 半角変換
カタカナ → 全角変換
数字(?) → 半角変換
といったように文字により統一性を持たせたいと思っています。
どうかご教示ください。
よろしくお願いします。

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

引用なし
パスワード
   べる様 こんにちは

なるほど、了解しました 〆(・∀・)

ひとつのテキストボックス内で文字種が「混在」している。
と考えたほうがよいわけですね。

( 混在は無いという条件ですと解決方法が楽になりますけど・・・ )

現在職場で質問箱を見ていますので(^^;、帰宅しましたらまた返信します。

【3249】Re:文字の形態別に全半角の変換を変える
発言  こもれび  - 04/8/17(火) 15:49 -

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

ひとつ教えてください。
「スペース」(半角:0x20,全角:0x8140)はどちらに統一したらよいのでしょうか?

【3252】Re:文字の形態別に全半角の変換を変える
質問  べる  - 04/8/17(火) 17:36 -

引用なし
パスワード
   ▼こもれび さん:
>こもれびです
>
>ひとつ教えてください。
>「スペース」(半角:0x20,全角:0x8140)はどちらに統一したらよいのでしょうか?

レス、ありがとうございます。
確かにスペースも含まれている可能性がありました。
希望としましては、
英字 → 半角スペース
カナ → 全角スペース
としたいのですが、可能なのでしょうか?
よろしくお願いいたします。

【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

【3262】Re:文字の形態別に全半角の変換を変える
質問  べる  - 04/8/18(水) 17:57 -

引用なし
パスワード
   ▼こもれび さん:

サンプルソースありがとうございました。
ご指示通り、標準モジュールに

Public Function KonzaiConv(KonzaiStr) As String
のソースをコピーして、

コマンドボタンを押した時に下記が実行されるようにしましたが、

Me!Client_name1.Value = KonzaiConv(Me!Client_name1.Value)

”KonzaiConv”に対して

「コンパイルエラー:
 モジュールではなく、変数またはプロシージャを指定してください。」

とのメッセージが出てしまいますが、
原因はわかりますでしょうか?
ご教授の程、よろしくお願いいたします。

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

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

>Public Function KonzaiConv(KonzaiStr) As String
>のソースをコピーして、
>
>コマンドボタンを押した時に下記が実行されるようにしましたが、

ひょっとして標準モジュールにコピペしたソースの変数を変更
されていませんか?
例えば、冒頭の「Public Function... (KonzaiStr) As... 」を
「Public Function...(Me!Client?name1.value) As...」に変えたとか。

あと、考えられるのは Public FunctionをPublic Subに変えて、
As以降を取っちゃったとか…

サンプルと書きましたが、標準モジュールには全くそのまま
コピペすればよいように作ったのですが…
よく関数でつまづくのは受け渡しのところです。
Function関数の括弧の中に書かれる変数は関数内で使用される
変数です。これを変更してしまうと関数は受け付けてくれなくなってしまいます。

【3266】Re:文字の形態別に全半角の変換を変える
発言  こもれび  - 04/8/18(水) 23:49 -

引用なし
パスワード
   いろいろ原因を考えておりますが…

もしかすると、この投稿にソースをコピペしたときに1行あたりの文字数制限で
強制的に或る行が改行されてしまい、「迷子」の行が出来てしまった可能性が
あります。

中身を変えず、1行あたりの文字数を短くしたソースを掲載しますので
差し替えてみてください。

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

【3275】Re:文字の形態別に全半角の変換を変える
質問  べる  - 04/8/19(木) 11:55 -

引用なし
パスワード
   ▼こもれび さん:

色々と原因を追求して頂きまして、ありがとうございます。
変数の部分は、
TxtAns  → Client_name1
txtstr  → Client_name1
とした以外は、標準モジュールなどは変更していません。
また、一行の幅を短くしたモジュールに変えてみましたが、
こちらも変化はなく、同様のコンパイルエラーが出てしまいました。
初心者の私では考える術もありません。
恐れ入りますが、他に考えられる原因などはないでしょうか。
よろしくお願いいたします。

【3276】Re:文字の形態別に全半角の変換を変える
発言  こもれび  - 04/8/19(木) 12:22 -

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

ひょっとして・・・
元々「Module1」という標準モジュールの名前をKonzaiConvに
変更されていませんか?

私のほうで(普段は行わないのですが)試しにModule1という名前を
KonzaiConvに変えたら同じエラーメッセージが出ました。

もし、変更されていましたら元々の名前のModule1に変更するか、
「BellModule」とか適当な名前に変更してみてください。
それでうまく動けば、関数名とモジュール名は同じにしてはいけない
ことがわかります。
(私も知らなかったです。)

【3279】Re:文字の形態別に全半角の変換を変える
お礼  べる  - 04/8/19(木) 13:39 -

引用なし
パスワード
   ▼こもれび さん:

>ひょっとして・・・
>元々「Module1」という標準モジュールの名前をKonzaiConvに
>変更されていませんか?

まさにご指摘いただいたことをやっていました。。。
Module名を変更したら、正しい結果が返ってきました。

今回、初めて質問させて頂きましたが、当初は期待していませんでした。
ところが、こんなにも親身になって素晴らしい回答をいただけるサイトで
あった事に驚き、感動しました。

こもれび様、本当にありがとうございました。

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