No.1
- 回答日時:
作成したマクロの通常の処理を開始する直前に、On Errorステートメントを入れて、
エラーが発生したときの処理(ファイルのクローズやエラーメッセージの表示)を分岐するのがよいかと思います。
>EXCEL2000では中断せずに・・・
とありますが、ただ単に中断されていないというだけで、実際の処理の結果は正しいのでしょうか?
同じマクロなら、当然エラーが発生すると思いますが・・・。
No.2
- 回答日時:
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
No.3
- 回答日時:
初心者の視点から見れば、
Dim a%,b$
としておいて、
b$=inputbox(~)
a%=val(b$~)
ってしたら「一応」回避できませんか?
…と思うのですがこれはまずいのでしょうか?
当初の目標であるエラーによるSTOPはなくなりました。
ただ、ELSE以下の文が実行されず「0」が入力される点が少し気になります。
最初は動けばいいなんて言いながら、だんだん贅沢になってすいません。
どうもありがとうございました。
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
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- Excel(エクセル) EXCELでリターンキーが押されたらそのセルに特定の文字を表示したいのですが。 2 2022/08/07 12:58
- その他(コンピューター・テクノロジー) デジタル化推進でうちの会社では、ペーパーレス化が進んでいます。 そこで、質問です。 会社では、検査課 3 2023/06/11 00:17
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Visual Basic(VBA) VBAでPowerPointからExcelにレイアウト通りに出力する 4 2023/07/05 12:22
- Excel(エクセル) Excelで日付のグラフへの表示 2 2022/04/15 11:04
- Excel(エクセル) vba フォーム軽量化 1 2022/09/07 18:59
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Excel(エクセル) Excleマクロ セル値の代入と文字列の結合について 3 2022/10/05 16:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBSで変数の宣言はできないので...
-
エクセルエラー13型が一致しま...
-
ExcelVBA Range クラスの Page...
-
【Excel VBA】マクロをボタンに...
-
実行時エラー48発生時のDLL特定...
-
OLEDB.NETで接続できない
-
VBS実行時エラー オブジェクト...
-
excel vbaでvlooupの変数がわか...
-
マクロについて教えてください...
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
VBAでのエラー
-
実行時エラー3001「引数が間違...
-
なぜエラーになるのでしょうか...
-
Excel2019 ワークシートのコピ...
-
vbaのvlookup関数エラー原因を...
-
なぜこんな初歩的なVBAのIf文で...
-
デバッグ時はOK、デバッグ無し...
-
Outlook.ApplicationをCreateOb...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAでのエラー
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
実行時エラー3001「引数が間違...
-
VBS実行時エラー オブジェクト...
-
VBAがブレークモードになっ...
-
OLEDB.NETで接続できない
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
VBSで変数の宣言はできないので...
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー -'-2147417848
-
AccessVBAでExcelを起動し、罫...
-
VB6+SQL サーバー 2000 で 実行...
-
Outlook.ApplicationをCreateOb...
-
Application.ActiveInspectorで...
おすすめ情報