• ベストアンサー

エクセルVBAでのエラー対処

テキストボックスに数字以外の文字が入ったら、「型が一致しません。」のエラーでストップしてしまいます。 これを、エラー表示だけして、マクロを継続できるような方法を教えて下さい。よろしくお願いします。

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

  • ベストアンサー
  • kikaida-
  • ベストアンサー率69% (37/53)
回答No.2

テキストボックスの名前がtext1だったとします。 if isNumeric(text1) = false then   msgbox "数値を入力してください。"   exit sub end if このような処理をいれれば、数値以外の値を入力した際にエラーメッセージがでて最初にもどります。 プログラムを作成するときは、実行する処理の前に上のようなエラーチェックが必要となります。

komusemari
質問者

お礼

ありがとうございました!試してみたら、イメージどおりのオペレーションが出来ました。今後もよろしくお願いします。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>数字以外の文字が入ったら、「型が一致しません。」のエラーでストップしてしまいます。 この部分はどのようなプログラムになっているのですか? 「On Error Resume Next」の一行で、これを記入した行以降の実行時エラーを飛ばす事が可能ですが、プログラムの内容によってはこれでエラーを解決した事にはなりません。 また、それ以降のエラーも判別出来なくなるので、「On Error Goto 0」でエラー処理するように戻す必要も有ります。 入力内容が文字でも数字もOKなら、そのようなプログラムに修正する必要があると思います。

komusemari
質問者

お礼

回答ありがとうございます。今回は非常に簡単なプログラムだったため、そこまで区別する必要はありませんでした。今後複雑なプログラムを作成するときに参考にさせて頂きます。貴重なご意見、ありがとうございました。

関連するQ&A

  • [Excel2003] On Error GoTo について教えてください。

    エラー処理について教えてください。 以下の様なマクロで、インプットボックスに 数字以外を入力した場合のエラー処理ですが、 次のような手順で進めると 「型が一致しません」とエラー表示されてしまいます。 どこがいけないのでしょうか?   【手順】   ・マクロ実行   ・インプットボックスへ数字以外の文字を入力   ・「OK」クリック   ・再びインプットボックス出現   ・もう一度数字以外の文字を入力   ・「OK」クリック←ここでエラー表示! Sub TEST() Dim Tuki As Integer On Error GoTo INPT INPT: Tuki = InputBox("何月分ですか?" & vbCrLf & _ "数字を入力してください。", "集計月入力", 1) If Tuki = 0 Or Tuki > 12 Then MsgBox "1から12の数字を入力してください。" GoTo INPT End If On Error GoTo 0 End Sub

  • 【エクセルのマクロ】テキストボックスが空白でもエラーが出ないようにしたい

    エクセルを使って、ユーザーフォームのテキストボックスに入力した小数点を含む数字をコピー、もし入力されていなければセルの中を消すマクロを書いていて、次のようなプログラムをテキストボックスとおなじユーザーフォームにあるボタンに取り付けました。 n3 = (n_3.Text) If n3 = Empty Then Range("j23").ClearContents Else Range("j23").Value = n_3 End If しかし、この方法だとコピーした数字が文字列として保存されてしまい、 計算に不向きなので、数字データとしてコピーするためにいちばん上の行に Dim n3 As Single と入れたところ、テキストボックスが空白の場合”型が一致しません”と表示されてエラーが出てしまいます。 調べたところ、Emptyという言葉はSingleのデータ型には使えないことまではわかったのですが、代わりにどのような言葉を使えばよいのかがわかりませんでした。 どなたかEmptyの代わりとなるような言葉か、プログラムを教えていただけないでしょうか?

  • Excelマクロエラー

    Excelのマクロエラーの件でアドバイスを お願い致します 添付画像のセル「C2」が見た目には空白ですが 何かが入ってる様子で C2をDeleteすると4行目の様に表示されます 目的は C2に数字が入っている時は マクロで計算出来るのですが 空白だと思われる時は「実行時エラー 型が一致しません」となり Range("c2") = "??" とデバックで見れます 此のデータはホームページからコピーで取込んだもので C2をDeleteするとエラーが出ませんが 数字が入っている時は計算出来るので 空白(実際は空白でない)の時にエラーが出ない方法のアドバイスを お願い致します 

  • Excelのオブジェクトが消えた!

    ある時Excelを開いたら、エラーが出て開きませんでした。 (エラーの表示内容はちょっと忘れてしまいましたが) エラーに何回もOKを返すと開けるのですが、 よく見るとマクロを登録しているボタンが全て消えていました。 あと、テキストボックスや図形など、セルに直接入力してある文字以外は 全て消えてしまっていました。 これは何故なんでしょうか? 何故こんな現象が起きるんでしょうか? こうなってしまったデータを直す方法ってありますか? よろしくお願いします。

  • エクセルのVBAのエラー

    早速ですが、よろしくお願い致します。 単純なマクロですが、下記の記述は実行すると、ただメッセージボックスが表示される…つもりです。 タイトルが「確認メッセージ」、文字は「完了しました」、ボタンは「OK」のみです。 しかし、エラーになってしまいます。(コンパイルエラー 構文エラー) Sub test()   MsgBox ("完了しました",vbOKOnly,"確認メッセージ") End Sub どこが間違っているのでしょうか?? ご教授をお願い致します。

  • エクセルVBA オブジェクト名の変わりになる変数

    質問しつれいします。 エクセルVBAでマクロを作っているのですが、 分からないところがあるのでご指導の程お願いしたいです。 テキストボックスを複数つくり、それに順に値を 当てはめていくのですが、それを一つのループでしたいと 考えています。 例えば、text1というオブジェクト名のテキストボックスに text1.value = ○○ という風に、text20まで数字の部分だけ変えてループ関数で値を当てはめていきたいのですが、どうすればいいか分かりません。 変数に"text"という文字列と数字部分を結合したものをあてはめて 数字部分だけループ時に加算していき、 変数.value = ○○ という形で実現したいと思い色々試してみましたが、エラーが出てうまくできません。 わかる方がいらっしゃいましたら是非お教え願えませんでしょうか。 お願いいたします。

  • EXCEL VBAで・・・。

    テキストボックス34に入力した値を、ExcelのA列の値より検索し その隣の値をテキストボックス4に表示させる、と言う処理をしています。 検索時に検索データが見当たらない場合、メッセージボックスを表示し、 更に、テキストボックス34のデータを消去→テキストボックス34にフォーカス移動 させたいのです。 下記のコードですと、メッセージボックス表示と テキストボックス34のデータ消去までは出来るのですが フォーカス移動してくれません。 イベントをexitにしている理由は特にないのですが、changeを使うと、 テキストボックス34に1文字入力された時点でメッセージボックスが表示されたり、 1文字でも一致するデータが順に表示されてしまいます。 (テキストボックス34に入力するデータの文字数は3文字固定です。) 何か良いお知恵がありましたら、お教え下さい。 ----------------------------------------------------------- Private Sub Textbox34_exit(ByVal Cancel As MSForms.ReturnBoolean) Dim Result As Variant Set Result = Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True) If Result Is Nothing Then MsgBox ("入力されたコードは登録されていません。") TextBox34.Text = "" TextBox34.SetFocus Else Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True).Activate ActiveCell.Offset(0, 1).Select TextBox4.Text = ActiveCell.Value End If End Sub

  • EXCEL97のマクロについて

    EXCEL97で、数値や文字を入力するデータベースのマクロを作ったのですが、数値を入れるところに数値以外を入力すると「型が一致しません」というエラーメッセージがでて中断してしまいます。EXCEL2000では中断せずに先に進む事ができるのですが、EXCEL97でも同様に中断させない方法があるのでしょうか?

  • エクセルVBAで改行のやりかた

    ユーザーフォームでテキストボックスを設置しています。 エクセルファイルからデータを検索して、一致するものをこのテキストボックス内に表示したいのですが、 データがいくつもある場合、テキストボックス内で改行して表示したいのですがやり方がわかりません。 分かる方いらっしゃいましたら伝授お願いします。

  • VBA テキストボックスで日付を変更するとエラー

    VBAにて、ユーザーフォーム上のテキストボックスに初期値として今日の日付が入力されており、さらにそれを任意で変更するというマクロを作成しようとしています。 'テキストボックス2に初期値として今日の日付を入力 Private Sub UserForm_Initialize() TextBox2.Text = Format$(Date, "yyyy/mm/dd") End Sub 'テキストボックス2に入力された日付はdenpyoudateという変数に格納される Private Sub TextBox2_Change() denpyoudate = UserForm2.TextBox2.Value End Sub 入力された日付を変数として利用したいので、上記のようなコードにしたのですが、実際に初期値である今日の日付を編集すると「型が一致しません」というエラーが出てしまいます。 このエラーを回避し、テキストボックスに入力された日付を変数として使用するにはどうすればよいでしょうか?