OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

EXCEL97のマクロについて

  • 困ってます
  • 質問No.142502
  • 閲覧数79
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 64% (9/14)

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

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

  • 回答No.4

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
お礼コメント
mikan01

お礼率 64% (9/14)

どうもありがとうございます。
自分の思っていた様に、プログラムを動かす事ができました。
投稿日時 - 2001-10-01 22:14:43
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1

作成したマクロの通常の処理を開始する直前に、On Errorステートメントを入れて、 エラーが発生したときの処理(ファイルのクローズやエラーメッセージの表示)を分岐するのがよいかと思います。 >EXCEL2000では中断せずに・・・ とありますが、ただ単に中断されていないというだけで、実際の処理の結果は正しいのでしょうか? 同じマクロなら、当然エラーが発生すると思いますが・・・。
作成したマクロの通常の処理を開始する直前に、On Errorステートメントを入れて、
エラーが発生したときの処理(ファイルのクローズやエラーメッセージの表示)を分岐するのがよいかと思います。

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

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

  • 回答No.2
レベル14

ベストアンサー率 51% (1179/2272)

Excelのバージョンによっては、データ型が一致しなくてもそのデータ型に自動的に変換してくれることもあります。 Excel2000にしても、中断しなくても正しい処理をしているかどうかわかりません。 したがって、どんな時でもデータ型は明示した方が良いです。そして値に対してそれぞれ処理をコーディングします。 例えば、 ・テキストボックスをフォームなりシートなりに置く場合は、KeyPressイベントに入 ...続きを読む
Excelのバージョンによっては、データ型が一致しなくてもそのデータ型に自動的に変換してくれることもあります。
Excel2000にしても、中断しなくても正しい処理をしているかどうかわかりません。
したがって、どんな時でもデータ型は明示した方が良いです。そして値に対してそれぞれ処理をコーディングします。
例えば、
・テキストボックスをフォームなりシートなりに置く場合は、KeyPressイベントに入力規制のコードを書くなど。
・セルの値を拾う場合は、データ型を調べて処理を分岐するとか、お奨めしませんが、エラートラップをするなど。

あと、エラーが出たときは、デバッグでエラーの発生場所を確認してみてはいかがですか。そして、その場所のエラーが解決出来なければ、その部分のコードを質問に載せた方がみなさん回答し易いですよ。
では。
補足コメント
mikan01

お礼率 64% (9/14)

御回答ありがとうございます。
質問の仕方が不充分でしたので、具体的に質問させて頂きます。
変数を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:44
  • 回答No.3
レベル6

ベストアンサー率 30% (3/10)

初心者の視点から見れば、 Dim a%,b$ としておいて、 b$=inputbox(~) a%=val(b$~) ってしたら「一応」回避できませんか? …と思うのですがこれはまずいのでしょうか? ...続きを読む
初心者の視点から見れば、
Dim a%,b$
としておいて、
b$=inputbox(~)
a%=val(b$~)
ってしたら「一応」回避できませんか?
…と思うのですがこれはまずいのでしょうか?
お礼コメント
mikan01

お礼率 64% (9/14)

当初の目標であるエラーによるSTOPはなくなりました。
ただ、ELSE以下の文が実行されず「0」が入力される点が少し気になります。
最初は動けばいいなんて言いながら、だんだん贅沢になってすいません。
どうもありがとうございました。
投稿日時 - 2001-10-01 22:13:22
  • 回答No.5
レベル14

ベストアンサー率 51% (1179/2272)

No.2のmaruru01です。 エラートラップをしない方法です。 変数に代入した値の型を調べる関数、VarTypeを使用します。 VarType関数については、Helpを参照して下さい。 RIO-Freakさんのを借りました。 Sub InputA()   Dim a   a = InputBox("200未満の整数を入力してください。")   If ...続きを読む
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
お礼コメント
mikan01

お礼率 64% (9/14)

明日、トライしてみます。
投稿日時 - 2001-10-01 22:15:49
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ