• ベストアンサー

入力規則について

[環境] Windows2000 Access2000 ※スレ違いお許し下さい。同様の質問を下記URLで行ってます。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=744564 [問題点] Access2000で入力規則として「ひらがな」全角 「かたかな」全角 「英数字」半角 を自動で行い たいと思い一番簡単な手法を試行錯誤中です。 Dim i As Integer Dim ix As Integer Dim strChk As String Dim strMoji As String Dim strEisu As String Dim txtData As String Dim GetData As String strMoji = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" strEisu = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" txtData = Trim(Me.テキスト5.Value) For i = 1 To Len(txtData) strChk = Mid$(txtData, i, 1) For ix = 1 To Len(strMoji) If StrComp(StrConv(Mid$(strMoji, ix, 1), vbFromUnicode), _ StrConv(strChk, vbFromUnicode), vbBinaryCompare) = 0 Then _ strChk = StrConv(strChk, 4) If StrComp(StrConv(Mid$(strEisu, ix, 1), vbFromUnicode), _ StrConv(strChk, vbFromUnicode), vbBinaryCompare) = 0 Then _ strChk = StrConv(strChk, 8) Next ix GetData = GetData & strChk Next i Me.テキスト5.Value = GetData ●上記以外の解決方法を考えております。

質問者が選んだベストアンサー

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.5

#2です。 DLLを利用する手順です。 おもむろに以下をダウンロードして解凍、nkf32.dllをc:\winnt\system32にコピーします。OSが9xの場合、c:\windows\systemかsystem32かな? 動作しない場合、windowsとかwinntとか、あちこち移してみてください。 NKF32.DLL http://www.vector.co.jp/soft/win95/util/se020949.html 変換処理のソースは、 Option Explicit の次の行あたりに、 Private Declare Sub ToHankaku Lib "nkf32" (ByVal dst As String) Private Declare Sub ToZenkakuKana Lib "nkf32" (ByVal dst As String, ByVal src As String) の宣言と、 Function Cnv2(ByVal strSrc As String) As String Dim strRet1 As String * 255 Dim strRet2 As String * 255 strRet1 = strSrc Call ToHankaku(strRet1) Call ToZenkakuKana(strRet2, strRet1) Cnv2 = Trim(strRet2) End Function だけで良いハズです。 この処理の場合、255文字以上入力すると、Accessが止まったりします。 半角カナ→全角カナの変換で文字数が増えるのが厄介ですね。 -- > 環境等の違いがあるのでしょうか? 私はWin2000Pro+Access2000の環境ですが、質問文の処理は半角カナ以外が期待通りに変換されているようでした。

参考URL:
http://www.vector.co.jp/soft/win95/util/se020949.html
popokun
質問者

お礼

丁寧な説明ありがとうございます。

その他の回答 (4)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>>動かないですよ。文字の切り出し出来てません。 >>デバッグして確認してください。 > >すみません。再度確認しても正確に動いております。 >参照設定等のチェックも入れておりませんが、taka_tetsu様 >と環境等の違いがあるのでしょうか? ごめんなさい。勘違いです。MidBと間違えました。 ちゃんとそれで動きます・・・ >>#ちなみに漢字とか、記号(全角・半角共)ってどうするんですか? > >説明不足で申し訳ありません。漢字は全角・記号は半角で >考えております。 全角しかない記号は? ○←こんなのとか。おそらく全角のままでいいかと思いますが。 で、結局、半角カナや、全角英数が入力されたらどうするんですか? 全角カナや半角英数に変換するんですか? 使用できない文字があるってエラーにするだけですか? あと、 >゛「『』ー~ これって全部半角扱いじゃないでしょ? ゛、ー、「は半角カナになっちゃいますよ。 それに『』の半角ってどれに該当するんですか? ということで、 1.全角→半角に変換する文字の文字コードの範囲 2.半角→全角に変換する文字の文字コードの範囲 3.全角のままの文字の文字コードの範囲 を正しく調べることをお勧めします。 で、1文字ずつAsc()で文字コードに変換し、Select Caseで 1、2、3のどのパターンの文字か判断し、StrConvで 該当の文字に変換orエラーにすればよろしいかと。

popokun
質問者

お礼

たくさんの御指摘ありがとうございます。 範囲選択があいまいで、申し訳御座いません。 大変参考になりました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>>strChk = Mid$(txtData, i, 1) >>これってAccess2000でちゃんと動きます? >>AC2000ってUnicodeだからだめだと思うんですけど。 > >一応重たいながらも動いております(^^;; 動かないですよ。文字の切り出し出来てません。 デバッグして確認してください。 >なるほど!追加の質問になってしまいますが、コード比較 >のほうが軽く出来るのでしょうか? 2重ループ&文字列比較よりは速いと思いますよ。 比較は文字ごとで文字種1種につき1回ですし。 #ちなみに漢字とか、記号(全角・半角共)ってどうするんですか?

popokun
質問者

補足

>動かないですよ。文字の切り出し出来てません。 >デバッグして確認してください。 すみません。再度確認しても正確に動いております。 参照設定等のチェックも入れておりませんが、taka_tetsu様と環境等の違いがあるのでしょうか? >#ちなみに漢字とか、記号(全角・半角共)ってどうするんですか? 説明不足で申し訳ありません。漢字は全角・記号は半角で考えております。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> 入力規則として~を自動で行いたい 指定した文字列が、 全角かな、全角カナ、半角英数字 から構成されているか判断したい?という事でよいのでしょうか?自動的に置換したいのか、不明瞭です。 ゛「『』ー~ -1.2 abc_def I'm などはどうなります? -- > 簡単な手法を 文字単位だと面倒なので、 <元の文字列>と<元の文字列をひらがな→カタカナ変換した文字列>を比較、同じならひらがなは入っていない。 <元の文字列>と<元の文字列をカタカナ→ひらがな変換した文字列>を比較、同じならカタカナは入っていない。 <元の文字列>と<元の文字列を半角→全角変換した文字列>を比較、同じなら半角文字は入っていない。(半角の記号なんかはモレますが) とします。 -- または、既存のAPIなどで可能なものを探して、そちらを利用します。 Unicodeの話が入ると結構面倒な気もしますが。

popokun
質問者

補足

説明不足で、すみません。 >゛「『』ー~ >-1.2 >abc_def >I'm は考えておりませんでした。基本的には半角扱いです。 "あいう・ABC・ABC・アイウ・アイウ・123・123"   ↓↓↓ "あいう・ABC・ABC・アイウ・アイウ・123・123" と言った感じで、大雑把ですが基本は1バイト「カナ」文字を禁止して、それ以外の記号・英数字を半角扱いにしたい。と質問を言い換えさせて下さい。 私ほとんどAPIを利用することが無いので、もしよろしければ、ちょっとした例を教えて頂けないでしょうか?

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

文字足りてないですけど(^^;; "ッ"とか"ゥ"とか。 >strChk = Mid$(txtData, i, 1) これってAccess2000でちゃんと動きます? AC2000ってUnicodeだからだめだと思うんですけど。 個人的には、対象の文字列を1文字ずつ文字コードにして、そのコードが該当文字種の範囲に入っているかどうかで判断します。

popokun
質問者

お礼

>文字足りてないですけど(^^;; >"ッ"とか"ゥ"とか。 すみません。失礼しました。。。(><) >strChk = Mid$(txtData, i, 1) >これってAccess2000でちゃんと動きます? >AC2000ってUnicodeだからだめだと思うんですけど。 一応重たいながらも動いております(^^;; >個人的には、対象の文字列を1文字ずつ文字コードにし >て、そのコードが該当文字種の範囲に入っているかどうか >で判断します。 なるほど!追加の質問になってしまいますが、コード比較 のほうが軽く出来るのでしょうか?

関連するQ&A