Page 17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼文字認識 豆太 02/9/3(火) 9:25 ┣Re:文字認識 yu-ji 02/9/3(火) 9:33 ┃ ┗Re:文字認識 豆太 02/9/3(火) 10:06 ┃ ┗Re:文字認識 yu-ji 02/9/3(火) 12:10 ┗Re:文字認識 イケガミ 02/9/3(火) 9:54 ┗どうもありがとうございます 豆太 02/9/3(火) 10:53 ┗追加質問なんですが。。。 豆太 02/9/6(金) 10:25 ┗Re:追加質問なんですが。。。 イケガミ 02/9/6(金) 11:35 ┗Re:追加質問なんですが。。。 豆太 02/9/6(金) 11:53 ┣応用でいけますね。 yu-ji 02/9/6(金) 14:35 ┗Re:コード例 イケガミ 02/9/6(金) 15:02 ┗ありがとうございました。 豆太 02/9/6(金) 16:33 ─────────────────────────────────────── ■題名 : 文字認識 ■名前 : 豆太 ■日付 : 02/9/3(火) 9:25 -------------------------------------------------------------------------
お世話になります。 いつもいつも、低レベルな質問なんですが・・・・。 テキストボックスに値を入れ、入力された値が 数値か、文字かを確認には、『IsNumeric』関数があったんですが、 文字の中でも”あいうえお”と”あ1い2”のように、 文字のみと文字型の数字が入っている文字の区別をさせたいんですが どうもいい方法が見つかりません。 どなたか、教えていただけませんか?? |
▼豆太 さん: >テキストボックスに値を入れ、入力された値が >数値か、文字かを確認には、『IsNumeric』関数があったんですが、 >文字の中でも”あいうえお”と”あ1い2”のように、 >文字のみと文字型の数字が入っている文字の区別をさせたいんですが >どうもいい方法が見つかりません。 テキストボックスの中の文字を1文字ずつチェックして、IsNumeric(CIntも 必要?)でTrueが一回でもあれば”混合”、一回もなければ”文字のみ”と いうことで区別するというのは、どうですか? |
yu-ji さんありがとうございます。 >テキストボックスの中の文字を1文字ずつチェックして、IsNumeric(CIntも >必要?)でTrueが一回でもあれば”混合”、一回もなければ”文字のみ”と >いうことで区別するというのは、どうですか? すいません。文字を1文字ずつチェックする方法を調べてみたんですが 見つけることができませんでした・・・。 教えてもらえませんか?? |
▼豆太 さん: すでにイケガミさんので完了したようですが、必要ないと思いますが、 参考までにってことで、一応レスしときます。 >>テキストボックスの中の文字を1文字ずつチェックして、IsNumeric(CIntも >>必要?)でTrueが一回でもあれば”混合”、一回もなければ”文字のみ”と >>いうことで区別するというのは、どうですか? Function NumCheck(StrAr As String) As Boolean Dim cnt As Integer NumCheck = False For cnt = 1 To Len(StrAr) If IsNumeric(Mid(StrAr, cnt, 1)) Then NumCheck = True Exit For End If Next End Function ******************* Midで、何文字目(cnt)から1文字分の文字を取ってきて、IsNumericで チェックし、もし数字だったら返り値をセットしてループを抜ける ・・・・・という感じです。 ちなみにチェックする文字列が長いようであれば、1文字ずつチェックしていく この方法より、イケガミさんのレスにあったInStrを使った方が、多分 早いんじゃないかと思います(試してみてはないんで、分からないですが) 短かったら、どっちも大差ないかな。 |
yu-ji さんから回答が入ってますが、せっかく作ったので。。 > 文字の中でも”あいうえお”と”あ1い2”のように、 > 文字のみと文字型の数字が入っている文字の区別をさせたいんですが InStr 関数などを使って数字が存在しているかを確認する必要があると 思います。 【コード例】 Function InStrTest(strText As String) As Boolean '-------------------------------------------------------------------- ' 0〜9の数字が含まれていれば、Trueを返す '-------------------------------------------------------------------- Dim lngFlg As Long Dim lngIdx As Long For lngIdx = 0 To 9 lngFlg = lngFlg + InStr(1, strText, lngIdx, vbTextCompare) Next lngIdx If Nz(lngFlg, 0) = 0 Then InStrTest = False Else InStrTest = True End If End Function もしくは、クエリの抽出条件で Like "*[0-9]*" のようにすれば 数字が含まれるものだけ抽出されます。 |
イケガミさん、いつもお世話になっています。 やっと今、教えてもらった処理の解読ができました。 やっぱ、基礎をしっかりやらないと何を見ても自分には 複雑に見えてくるんです・・・。 また、くだらない壁にぶつかると思いますので、その時はよろしくお願いします。 |
度々お世話になります。。。 今、テキストボックスの入力確認をしようと、 数字のみの確認は、IsNumeric関数を使用し、 文字のみの確認は、以前にここで教えていただいた以下の方法で やっています。(続きは下に) Function InStrTest(strText As String) As Boolean '-------------------------------------------------------------------- ' 0〜9の数字が含まれていれば、Trueを返す '-------------------------------------------------------------------- Dim lngFlg As Long Dim lngIdx As Long For lngIdx = 0 To 9 lngFlg = lngFlg + InStr(1, strText, lngIdx, vbTextCompare) Next lngIdx If Nz(lngFlg, 0) = 0 Then InStrTest = False Else InStrTest = True End If End Function ここで、文字にも”あああ”と”ああ###”のように 記号が入っている場合もあるんですが、 今回は、人の名前を登録させたいんで ここの区別もさせたいのですが・・・。 助けていただけませんでしょうか?? |
> ここで、文字にも”あああ”と”ああ###”のように記号が入っている場合 使ってはいけない文字一覧を提示してください。 この場合は、yu-ji さん案をベースに作る必要があります。 |
イケガミ さん 度々すいません・・。 >使ってはいけない文字一覧を提示してください。 一覧です。 !”#$%&’()=〜|{}「」『』:;+・¥。、<>≪≫_ 〔〕【】[] |
▼豆太 さん: >イケガミ さん 度々すいません・・。 >>使ってはいけない文字一覧を提示してください。 > >一覧です。 > >!”#$%&’()=〜|{}「」『』:;+・¥。、<>≪≫_ >〔〕【】[] この一覧を文字列なり配列なりに入れて、対象となるテキストの値に対し 1文字ずつInstrしてみるというのはどうですか? 文字列から1文字ずつ取るのは、前回の自分の書き込みを参考にしてみて ください。(Mid関数を使うやりかた) 1文字を取れれば、あとは同じようにInStrでチェックするだけですね。 ↓ 1文字ずつ取り出す:禁止文字列 チェックされる:テキスト ちなみに、テキストに入力される文字の長さがそれほど長くない場合は、 チェックする方とチェックされる方を逆にして、チェックした方がいいと 思います。(時間短縮の為) ↓ 1文字ずつ取り出す:テキスト チェックされる:禁止文字列 |
> 一覧です。 せっかく一覧をだしてもらいましたけど、1文字ずつ比較するのが 面倒だったので、まとめました。。 #結果的に比較対象の文字が増えてしまってますが。。 英数字・記号等が入っていれば 1 が返ってきます。 #アルファベットがOKということであれば、それ以外をする必要がありますが。。 Function lngInStrTest(strText As String) As Long '-------------------------------------------------------------------- ' 文字コード(33〜126) が入っていれば「1」 ' 入っていなければ「0」を返す '-------------------------------------------------------------------- Dim lngIdx1 As Long Dim lngIdx2 As Long lngInStrTest = 0 For lngIdx1 = 1 To Len(strText) For lngIdx2 = 33 To 126 If Mid(strText, lngIdx1, 1) = ChrW(lngIdx2) Then lngInStrTest = 1 Exit Function End If Next lngIdx2 Next lngIdx1 End Function |
イケガミ さん yu-ji さんご指導ありがとうございました。 また、壁にぶつかりましたら(泣) ご指導よろしくお願いします。。 |