[[20090121181932]] 『VBAで数字以外の文字列の入力を禁止したい』(ヤマ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.