- ベストアンサー
EXCEL97のマクロについて
EXCEL97で、数値や文字を入力するデータベースのマクロを作ったのですが、数値を入れるところに数値以外を入力すると「型が一致しません」というエラーメッセージがでて中断してしまいます。EXCEL2000では中断せずに先に進む事ができるのですが、EXCEL97でも同様に中断させない方法があるのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
No.#1のRIO-Freakです。一応、200未満の整数を入力するマクロです。 Sub InputA() On Error GoTo InputError Dim a As Integer a = InputBox("200未満の整数を入力してください。") If a < 200 Then データベースを作成するステートメント Else 『入力された数値が範囲を越えています。』のメッセージが表示されるステートメント End If Exit Sub InputError: 『入力が間違っています。』のメッセージが表示されるステートメント Exit Sub End Sub
その他の回答 (4)
- maruru01
- ベストアンサー率51% (1179/2272)
No.2のmaruru01です。 エラートラップをしない方法です。 変数に代入した値の型を調べる関数、VarTypeを使用します。 VarType関数については、Helpを参照して下さい。 RIO-Freakさんのを借りました。 Sub InputA() Dim a a = InputBox("200未満の整数を入力してください。") If VarType(a) <> 2 And VarType(a) <> 3 then '整数でない場合はプロシージャを抜ける MsgBox "整数を入力して下さい", vbCritical Exit Sub End If If a < 200 Then データベースを作成するステートメント Else 『入力された数値が範囲を越えています。』のメッセージが表示されるステートメント End If End Sub
お礼
明日、トライしてみます。
- monktyan
- ベストアンサー率30% (3/10)
初心者の視点から見れば、 Dim a%,b$ としておいて、 b$=inputbox(~) a%=val(b$~) ってしたら「一応」回避できませんか? …と思うのですがこれはまずいのでしょうか?
お礼
当初の目標であるエラーによるSTOPはなくなりました。 ただ、ELSE以下の文が実行されず「0」が入力される点が少し気になります。 最初は動けばいいなんて言いながら、だんだん贅沢になってすいません。 どうもありがとうございました。
- maruru01
- ベストアンサー率51% (1179/2272)
Excelのバージョンによっては、データ型が一致しなくてもそのデータ型に自動的に変換してくれることもあります。 Excel2000にしても、中断しなくても正しい処理をしているかどうかわかりません。 したがって、どんな時でもデータ型は明示した方が良いです。そして値に対してそれぞれ処理をコーディングします。 例えば、 ・テキストボックスをフォームなりシートなりに置く場合は、KeyPressイベントに入力規制のコードを書くなど。 ・セルの値を拾う場合は、データ型を調べて処理を分岐するとか、お奨めしませんが、エラートラップをするなど。 あと、エラーが出たときは、デバッグでエラーの発生場所を確認してみてはいかがですか。そして、その場所のエラーが解決出来なければ、その部分のコードを質問に載せた方がみなさん回答し易いですよ。 では。
補足
御回答ありがとうございます。 質問の仕方が不充分でしたので、具体的に質問させて頂きます。 変数をAとして、Aは200よりも必ず小さな整数なので、下記のようなA < 200のIF文を作りました。(本来ならIF文でA=整数としたかったのですが、やり方が分からなかったので・・・) このようにした時、EXCEL2000ならAに数値以外の文字を入力すると、プログラム的には間違っているのかもしれませんが「入力ミスです。」のメッセージが出ます(一応OK)。しかし、EXCEL97ではエラーになるので困っています。「変数に宣言文が必要なのでは」と思っているのですが、そこのところがよく分かりません。初めてのマクロ作成なので、Aを使って具体的に説明していただけると助かります。 (A=整数 のIF文の作り方をお願いします。) ''''''''''''''''''''''''''' A=INPUTBOX(Aの入力) IF A<200 THEN データベースを作成するステートメント(Aを指定のセルに入力する。) ELSE 「入力ミスです。」のメッセージが出るステートメント END IF
作成したマクロの通常の処理を開始する直前に、On Errorステートメントを入れて、 エラーが発生したときの処理(ファイルのクローズやエラーメッセージの表示)を分岐するのがよいかと思います。 >EXCEL2000では中断せずに・・・ とありますが、ただ単に中断されていないというだけで、実際の処理の結果は正しいのでしょうか? 同じマクロなら、当然エラーが発生すると思いますが・・・。
お礼
どうもありがとうございます。 自分の思っていた様に、プログラムを動かす事ができました。