• ベストアンサー

VBAで英数字入力チェックしたい。

いつもお世話になります。 いままで、ある項目の入力チェックを数字のみで 行っていたところ【IsNumeric】を英数字で行いたいのですが いくら調べても見当たりません・・・ 知っている方、どうかご指南ください。 よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

IsAlphaが無いですね。 チェック用に、半角に統一して(StrConv)文字列を作り、 1字づつ、JISコードの65-90、97-122をエラーにするチェックを行い、上記作った文字列はチェック後は使い捨てる。 こういうルーチンを作るより他ないでしょう。 記号なども含めて考える。 ただ記号は十分検討が必要です。制限しすぎると、運用後にダウンとか、大騒ぎになる恐れをこめてます。

peko_12
質問者

お礼

ありがとうございます。 仕様が変わってしまい、また新たな問題が発生してしまいました・・ また行き詰ったらご教授ねがうやもしれません。 今回はとても勉強になりました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.5

#04です。補足ありがとうございました ですが想像力が貧困なので、何をどうすれば良いのか理解できませんでした おそらく事前チェックと事後チェックを一緒くたに書いているからだと思います。もし事前チェック方法は回答として求めていないなら、混乱しますから書かなくて結構です。 具体的な文字列(○×1Ab)を示して、このような結果(1AやError)を得たいというように再度説明をお願いできませんか

全文を見る
すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

正規表現を用いたユーザ定義関数を2つ書きました。MyFunc1は文字列から半角英数字だけを取り出す関数で、MyFunc2は半角英数字以外がある時に「Error(文字列)」を返す関数です 質問のデータがどのように引き渡されるのか分かりませんので、とりあえずエクセルのユーザ定義関数として作りました。ワークシートに値を入力して関数の動作を確認してみてください。仕様に問題がなければロジックだけを流用できると思います。関数は  =MyFunc(A1) のようにして使います(A1はデータの入力されたセルアドレス) Function MyFunc1(ByVal trg As Range) As String '半角英数字を取り出す Dim RE, mchItems Dim strPattern As String Dim idx As Integer If trg <> "" Then   Set RE = CreateObject("VBScript.RegExp")   strPattern = "[0-9A-Z]"   With RE     .Pattern = strPattern     .IgnoreCase = True     .Global = True     Set mchItems = .Execute(StrConv(trg.Value, vbNarrow))     If mchItems.Count > 0 Then       For idx = 0 To mchItems.Count - 1         MyFunc1 = MyFunc1 & mchItems(idx).Value       Next idx     End If   End With   Set RE = Nothing End If End Function Function MyFunc2(ByVal trg As Range) As String '半角英数字以外があればエラーを返す Dim RE, mchItems Dim strPattern As String Dim idx As Integer If trg <> "" Then   Set RE = CreateObject("VBScript.RegExp")   strPattern = "[^0-9A-Z]"   With RE     .Pattern = strPattern     .IgnoreCase = True     .Global = True     Set mchItems = .Execute(StrConv(trg.Value, vbNarrow))     If mchItems.Count > 0 Then       MyFunc2 = "Error"     End If   End With   Set RE = Nothing End If End Function

peko_12
質問者

お礼

ありがとうございます。 とても参考になりました。 ぜひ取り入れたいのですが、仕様が変わってしまい、 また新たな問題が発生してしまいました。 フォームでの事前チェックで、全角入力を”必ず弾きたい”、かつ カタカナ・ひらがな入力を無効化する仕様に… 現在、KeyPress()で、大小A~Zと0~9のみ受け入れるようにしました。 が、キーボードで大小変換を押されてしますと(2バイト)は チッェク対象外になってしまうようです。 ご教授いただければよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

>どうしてもチェックをいれないといけないようなのです。 imogasi さんの提案のように、ループで1文字ずつチェックするしか無いと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

全角入力を”必ず弾きたい”のですか? StrConv(str, vbNarrow) で半角変換して受け入れるのは駄目ですか?

peko_12
質問者

お礼

ありがとうございます。参考にいただきました。 しかし仕様が変わってしまい、 また新たな問題が発生してしまいました。 フォームでの事前チェックで、全角入力を”必ず弾きたい”、かつ カタカナ・ひらがな入力を無効化する仕様に… 現在、KeyPress()で、大小A~Zと0~9のみ受け入れるようにしました。 が、キーボードで大小変換を押されてしますと(2バイト)は チッェク対象外になってしまうようです。 ご教授いただければよろしくお願いします。

peko_12
質問者

補足

その項目はフォームで、IME設定で半角英数字のみ入力 させています。(この状況ならチェックは要らないはずなのですが) どうしてもチェックをいれないといけないようなのです。 なので、全角入力はありえない状況での、wチェックということ になります。 入力前で半角英数字をはじいて、入力後チェックで半角英数字を 確認というような感じです。 もしよろしければご教授ください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Access VBAで、数字だけをチェックする方法。

    Access VBAで、数字だけをチェックする方法。 お世話になっております。 Access2002 VBAで、テキストボックスに入力された内容が、 数字(整数のみ)だけかをチェックしたいのです。 しかし、IsNumeric使用すると、 例> IsNumeric("1000,")=True IsNumeric("1000.")=True IsNumeric("1000+")=True となってしまいますし、 Valを使用すると、0(ゼロ)のチェックが出来ません。 ちょっと思いつかないので、 If txt_Word.Value <> Trim(Str(Val(txt_Word.Value)))) Then 'エラー処理 End If とか、 ループで回し、1文字ずつIsNumericするか・・・とか、馬鹿なことを思ってしまっています。 ちなみに、当テキストボックスは、パターンによって文字も許容したりするので、 書式設定で数字のみ入力は出来ません。 何か、本当に数字のみかをチェックするよい方法はありますか? よろしくお願いいたします。

  • 英数字のチェックをしたい ACCESSのVBAで

    ACCESSのVBAなんですが あるフィールドが英数字かどうかチェックしたいのですが つまり、数字か英字のみで、そのフィールドが構成されているか チェックしたいのです 、(カンマ)やカッコが含まれていれば、エラーと判定したい のですが、 よろしくお願いします

  • 入力データ「英数字」と「アンダーバー」のチェック

    入力データのチェックで英数字のチェックは、ctype_alnum($value)でチェック出来ますが、 以下の条件の場合どのようにするとチェック出来るのでしょうか? ・半角英数字 ・半角アンダーバー(先頭と最後は不可) ・空白(スペース)不可

    • ベストアンサー
    • PHP
  • 突然、半角英数字が入力できなくなりました。

    テキストエディターを使ってると、いきなり半角英数字の入力ができなくなりました。入力切替すると半角英数字の直接入力のはずが半角カナ文字が直接入力D絵表示されます。ウィルスチェックは毎週してますし、今日もしたばかりです。どうか対策を教えてくださいお願いします。

  • EXCELのセルの入力チェック

    お世話になります。 EXCELのセルに半角英数字のみの入力を受け付けるようにしたいのです。 マクロでチェックさせることはさせたくありません。 プロパティなど探してみたのですが、わかりませんでした。 お分かりになる方、よろしくお願いします。

  • 半角英数字が入力できなくなりました

    半角英数字が入力できず、大文字しか入力できなくなりました。どうすれば、入力できるようになりますか?説明書が今ないので困っています。キーボードの設定をどこか触ってしまったみたいなんです。

  • 全角英数字の入力

    今までMeでノートを使用していましたが、 XPでデスクトップに変えたところ、 全角英数字の入力ができなくなってしまいました。 今まではキーボードの半角/全角で切り替えることができたんですが、 現在どうしても全角英数字の切り替えができず、 例えば「~」を入力する際は「から」と入力してから変換したり、 「A」を打つ際は「えー」と入力しています。 キーボードから切り替える方法はないのでしょうか? 初歩的な質問で申し訳ないです。 どうぞよろしくお願いします。

  • 全角英数字の必要性が理解できない

    たまに、「いつも英字は全角にしたいのに半角で入力されてしまう」とか「入力してある数字を一括して全角に変換したい」などという質問を見かけます。 しかし、なぜわざわざ半角ではなく全角の英数字を使おうとするのか、私には理解できないのです。 「全角とか半角とか気にしていない」という人が全角英数字を使うのは理解できます。 「いつも英数字は半角に統一している」というのも分かります。(実際、私もそうです。) でも、「いつも英数字は全角で」というのは理解できません。 半角じゃなきゃだめという場合はたくさんありますが (メールアドレスとか URL とか) 、全角じゃなきゃだめという場合なんて私には思いつかないのです。 全角の英数字じゃなきゃダメだ、という方、よろしければ理由をお聞かせ下さい。

  • ATOK 2005で全角の英数字を入力できない

    Windows XP Professional SP3、ATOK 2005を使っています。「あ 連 R漢 般」に設定していますが、全角の英数字を入力できません。 「あ 連 R漢 般」でキー入力しても、画面には半角の青い文字が表示され、変換キーを押しても半角のままです。全角の英数字を入力したいときは、いつもそのときだけIMEに切りかえています。 ATOK 2005で全角の英数字を入力するにはどうしたらいいでしょうか。

  • 入力チェック

    すでに決まった数字0001や00102などがあり、 ユーザー側が数字を入力し、決まった数字以外を入力していないかどうか、チェックするものを作りたいのですがまったく検討がつきません。 何かヒントでもよいので教えていただけないでしょうか?