『VBAで数字以外の文字列の入力を禁止したい』(ヤマ) 過去の質問を検索してみても見つけることができませんでしたので、 質問させてください。 現在データ集約のために1行に100項目以上のデータを入れていくシートを作っています。 データ量は少なくて100件、多くて2000件程度と思います。 データエントリーは私でなく、他の方がします。 エントリーしてもらったデータを元に作業をする為、ある項目は半角英字のみ、全角かなのみ、数字のみと入力規制をかける必要がでてきました。 また項目ごとの桁数にも制限をかけます。 そこで教えていただきたいのが数字以外の文字列が入力された場合、該当セルに色を付けるというVBAのコードです。 入力規則を使い半角英字、全角等の指定はできましたが、数字のみの指定が見当たらなかった為悩んでます。 色を付ける以外に、そもそも該当列に数字以外の入力を禁止できるのが一番いいのですが・・・; エクセルは初心者同然なもので頭を抱えています。 もし分かる方いらっしゃいましたらアドバイスお願いします。 足りない文がありましたら補足いたしますm(_ _)m OSはWINDOWS XP SP2 エクセル バージョン2003を使用しています。 ---- 参考になると思います。 http://www.dokidoki.ne.jp/home2/masa7251/tips/access/acs00005.html (MARBIN) ---- VBAじゃないですが、入力規則のユーザー設定で、 =ISNUMBER(A1) のような感じで出来そうですが。   (純丸)(o^-')b ※久しぶりで何かドキドキ ---- =ISNUMBER(--A1)*(A1<>"") なんてのはどうでしょうか。 (ROUGE) ---- >MARBIN様 拝見しました。 入力規則にのユーザ設定欄に ”Not (Like "*[!0-9]*")” と入力し数字以外を入れたらはじかれました。 が、数字を入れてもはじかれてしまいました。 両脇のダブルコーテーションが悪いのかと思い外してみたり、イコールをつけて試してみても同じでした。 セルに直接式を入れてみると関数エラーになり、両脇の「"」をはずすと、[!0-9]部分の [ が名前が違いますというエラーメッセージになります。 ヘルプで「like」を検索してもでてこなかったため悩んでしまってます。 もう少し悪あがきしてみます; 助言有難うございました。 >純丸様 早いレスポンス有難うございます。 アドバイスいただいたとおり、入力規則→ユーザー設定に =ISNUMBER(A1) を入れてみましたが、 数字も、英字も入力できる状態でした。 セルに数式として入れるとtrue,falseを返してきました。 >ROUGE様 早いレスポンス有難うございます。 これはセルに直接式を入れるものでしょうか? 入力規則のユーザー設定に入れても反映されなかったので、テストでセルに式として入 れたところ、 セルA1が区別されていました。 重ねて申し訳ないのですが、質問があります。 isnumber(--A1)*(A1<>"")の(--A1)部分は対象を表していると思うのですが、--はなぜつけているのでしょうか。 また*移行の記述もわかりません(・・;) 関数ヘルプを見て見ますと、=ISNUMBER(対象) としかありませんでした。 お手数なんですが式の解説できましたらお願いします。 ---- 純丸さんのと同じく、入力規則のユーザー設定です。 純丸さんのと違うのは、全角数字も可能としている点です。 そのために -- をつけています。 (ROUGE) - ----------- 純丸さんのと同じく、入力規則のユーザー設定です。 =A1*1 dedonaidesyaro ebityan ---- A1セルがアクティブな状態で入力してますか? 私の方では数値以外は入力出来ないようになりますが。   (純丸)(o^-')b ---- A1セルから選択状態で入力規則のユーザー設定です。 =A1*1        数値のみ =ISERROR(A1*1)   数値以外 おばま ---- > VBAで数字以外の文字列の入力を禁止したい ですよね? 入力規則で設定しても、どこかのセルをコピーして貼り付けられたら その時点でアウトですよ? 一例として, Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range, x As Range, msg As String If Intersect(Target, Range("a1:d4")) Is Nothing then Exit Sub For Each r In Intersect(Target, Range("a1:a4")) If Not IsNumeric(r.Value) Then msg = msg & vbLf & r.Address(0,0) If x Is Nothing Then Set x = r Else Set x = Union(x, r) End If End If Next If Len(msg) Then MsgBox "以下のセルの値は数値と認識できません。" & msg x.Select End If End Sub (seiya) ---- >入力規則にのユーザ設定欄に ”Not (Like "*[!0-9]*")” と入力し数字以外を入れたらはじかれました。 >が、数字を入れてもはじかれてしまいました。 リンク先はアクセス用ですのでそのままではつかえません。 VBA化するのにあたって参考になると思いリンクしました。 VBAなら↓のようなかんじでもいけます。 Function suti(ByVal c As Range) As Boolean Dim i As Integer Dim mystr As String Dim midstr As String suti = True mystr = c.Value For i = 1 To Len(c.Value) midstr = Mid(mystr, i, 1) If midstr Like "*[!0-9]*" Then 'If Not (midstr Like "*[0-9]*") Then 'Notを使った記述 suti = False Exit For End If Next i End Function (MARBIN) ---- MARBINさん Function suti(ByVal c As Range) As Boolean suti = Not (c.Value Like "*[!0-9]*") End Function で良いのでは? (seiya) ---- seiyaさん、アドバイスありがとうございます。 そのほうが簡潔ですね。ありがとうございました。 (MARBIN) ---- >ROUGE様 「--」は全角数字も可能ということだったのですね! 勉強になりました。m(_ _)m >ebityan様 このやり方でも数字以外をはじくことができました! arigatougozaimasita >純丸様 大変失礼しました。 やり直したところうまく設定できました。 大変恥ずかしいことながら設定するセルの一つとなりでためしておりました・・・。 有難うございました。 >おばま様 ISERRORで数値以外をはじくことができるのですね。 覚えておきます。ありがとございました(^^ >seiya様 MARBIN様 コード提示してくださり有難うございます! 今からそのコードのやり方を真似てファイル用に作成してみようとおもいます。 確かに今、他のところからコピーすると数字以外も貼り付けれてしまいました・・・。 恐らく再度質問してしまうことになると思いますので、そのときは御回答よろしく願いしますm(_ _)m 皆様お忙しいなか質問に答えてくださり有難うございます。 頂いたアドバイスを活かし作成してみます。 ---- >ISERRORで数値以外をはじくことができるのですね。 違います。 >=ISERROR(A1*1) ()の中の式がエラーだったら ISERROR関数はTRUEを返します。 ()の中の式が肝心です。 =A1*1 として、A1に a とか 1 とか入れてみてください。 (MARBIN)