• ベストアンサー

EXCEL97のマクロについて

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

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

  • ベストアンサー
noname#1489
noname#1489
回答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
質問者

お礼

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

その他の回答 (4)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.5

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
質問者

お礼

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

  • monktyan
  • ベストアンサー率30% (3/10)
回答No.3

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

mikan01
質問者

お礼

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

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

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

mikan01
質問者

補足

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

noname#1489
noname#1489
回答No.1

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

関連するQ&A

  • エクセルのマクロの組み方に詳しい方

    エクセルのマクロの組み方に詳しい方はいらっしゃいませんか? 今、売り上げの記入を自動化できるようにマクロを組もうと試みています。 しかし、マクロの本を見てもちんぷんかんぷんです 。 頭の中で考えていることですが… まずデータベースとしてエクセル、またはそれに代用できるファイルに手入力で仕入れの詳細を記入していきます。 これは自分で入力していくので問題ありません。 ここからが問題です。 データベースとは別のエクセルにマクロを登録して、データベースから仕入れ情報を検索したいのです。 例えば… A1商品名、A2重量、A3仕入値…というように項目を作っていきます。 そしてB行に検索したい文字、数値を入力します。 そしてボタン1をクリックすると、B 行に入力した値に一致するデータを行ごとD行に呼び出します。 最後にD行の売上の項目に売上を記入して、更新したD行のデータをシート2、又は別のエクセルファイルに張り付けられるようにしたいです。 データの張り付けを文字のあるセルの最後尾の下の空白のセルに張り付けていけるようにしたいです。 どのようなマクロを組むと良いでしょうか?どのような言語を使うと良いでしょうか? 詳しい方是非是非教えて下さい。。

  • エクセル2013のマクロについて。

    Excel 2013のシートでセルに2桁の数字を入れていますがセルの書式設定でユーザー定義を"00"として数値が1桁の場合に頭にゼロがつくようにしてあります。このシートでマクロを作成した時、変数Aを"Dim A As Byte"と定義して、「A = "セル"」の式で マクロの実行が止まり、「実行時エラー'13':型が一致しません。」と出て数値として読み込めないようですがどなたか原因と解決方法ご存知の方教えて下さい。

  • エクセルにマクロが!

    エクセル(Excel2000)で、マクロを使っていないのにマクロが使われてしまいます。 例えば、 まず普通にスタート→プログラムと表示していき、エクセルを立ち上げる。 次にどこのセルでもいいから適当に文字を入力する。(例えば、A1にaと入力する) そして、ファイル→名前を付けて保存で保存する。 こうしてできたエクセルのファイルを普通に立ち上げると、「このファイルはマクロが使われています」と、マクロを有効にするか、無効にするかを確認する画面が出てきてしまいます。 どうしてでしょうか。直す方法はあるのですか。よろしくお願いします。

  • Excel2003でのマクロをExcel2010で

    Excel2003で動くことを確認されているマクロが組み込まれているスプレッドシートをExcel2010で使おうとすると以下のエラーメッセージが出ます。 「コンパイルエラー プロジェクトまたはライブラリが見つかりません」 そしてマクロのコードが表示されます。 Excel2010を擬似的にExcel2003に変更してこのプログラムを使いたいと考えています。やり方を教えてください。 なおWindows7です。

  • エクセルのマクロについて

    エクセルを閉じる時に指定されたセルに数値を入れていないと閉じられない(またはエラーメッセージを出す)ような設定ってありますか?マクロになるのかのと思うのですが・・・。基本的なことですいませんが教えてください。

  • 関数エラーによるエクセルマクロの処理中断

    そんなにエクセルVBAが得意じゃないです。よろしく教示くださいませ。 セルにエクセル関数を設定し、マクロを働かせて使用しています。 セルに想定外のデータが入力されると、関数エラーを起こしてしまうのですが、 このエラーが発生すると、マクロも中断になってしまいます。 関数エラーが発生しても、マクロが中断しないような、マクロ命令って あるのでしょうか。 実は、マクロで想定外データのチェックをかけてるのですが、その想定外データが入力されると、 警告は発するのですが、関数エラーが発生し、マクロが中断してしまうのです。 マクロに組み込むべき、コマンドはあるのでしょうか。

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

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

  • エクセルのマクロについて

     エクセル2000を使用しています。  先月使っていたファイルをコピーして、今月分のデータを新たに入力しようと思ったのですが、このファイルにはマクロが設定されており、コピーした新しいファイルではエラーメッセージが出てマクロが実行されません。  このエラーメッセージ通りセキュリティーレベルを変更したのですが、やはり同じエラーメッセージが出てマクロが実行されません。  そこで先月分のファイルからマクロ部分のみをコピーして張り付けてみました。  これによってマクロは実行されるものの、その実行にとても時間が掛かってしまいます。  これを解決する良い方法があったら教えて下さい。よろしくお願いします。  *当方は初心者ですので、できれば難解な専門用語は使わないで下さい。お願いします。

  • Excelのマクロで作りたい

    こんにちは。 あるデータベースを使うシステムでエクセルにデータをエクスポートしたら数値を入れている列が文字列として認識してしまいます。 本来文字列が入るところに数値を入れているだけなのですが、エクスポートした時も数値しか入っていないのですが文字列として入っています。 エクセル上では数値しか見えませんノートパッドにペーストすると数値の後ろに「”」があります。しかも改行されていて2行ある状態になっています。 なのでセルの内容を編集(F2)で開いてバックスペース2回押し、Enterで初めて数値として認識されます。 この行為をマクロ化するにはどうすればいいのでしょうか? マイクの記憶で同じ動作をしてもそのセルの場所と中にある数値も一緒に記憶されるのでどこでやっても記憶した数値を貼り付けする事になってしまいます。 これをどの箇所でもマクロを押せばそのセルをF2してバックスペースを2回する様に設定することは可能でしょうか? 判りずらい説明ですがもし判る方が居たらご教授下さい。 宜しくお願いします。

  • EXCEL マクロにて

    EXCELにて質問があります 別シートのピンクという文字列をB列から探すマクロを作成しました Private Sub CommandButton1_Click() Set aaa = Sheets("sheet1写真").Columns(2).Find("ピンク").Address(False, False) MsgBox aaa Application.Goto Sheets("Sheet1写真").Range(aaa) End Sub このマクロを実行しても型が一致しませんと言うエラーが出てしまいます 何がいけないのかさっぱりわかりませんどうかご教授お願いします

専門家に質問してみよう