アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (5件)

作成したマクロの通常の処理を開始する直前に、On Errorステートメントを入れて、


エラーが発生したときの処理(ファイルのクローズやエラーメッセージの表示)を分岐するのがよいかと思います。

>EXCEL2000では中断せずに・・・

とありますが、ただ単に中断されていないというだけで、実際の処理の結果は正しいのでしょうか?
同じマクロなら、当然エラーが発生すると思いますが・・・。
    • good
    • 0

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

補足日時:2001/09/29 01:51
    • good
    • 0

初心者の視点から見れば、


Dim a%,b$
としておいて、
b$=inputbox(~)
a%=val(b$~)
ってしたら「一応」回避できませんか?
…と思うのですがこれはまずいのでしょうか?
    • good
    • 0
この回答へのお礼

当初の目標であるエラーによるSTOPはなくなりました。
ただ、ELSE以下の文が実行されず「0」が入力される点が少し気になります。
最初は動けばいいなんて言いながら、だんだん贅沢になってすいません。
どうもありがとうございました。

お礼日時:2001/10/01 22:13

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
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
自分の思っていた様に、プログラムを動かす事ができました。

お礼日時:2001/10/01 22:14

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
    • good
    • 0
この回答へのお礼

明日、トライしてみます。

お礼日時:2001/10/01 22:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!