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

このQ&Aに関連する最新のQ&A

A 回答 (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
    • 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

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


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

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

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

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

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


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

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

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

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

このQ&Aと関連する良く見られている質問

Q会社のExcel97で作成したファイルが自宅のExcel97で開けません(悲)

友人の事なんですが皆様よろしくお願いします。長い説明です、すみません。

友人が会社で作成したExcel97のファイルが自宅のパソコンのExcel97で開けなくてエラーが出るのです。そのエラーとは、

「○(の中に×)プリンタが組み込まれていません。コントロールパネルの[設定]-[プリンタ]コマンドでプリンタを読み込んでください。」

と出るのです。取り合えずキャンセルをクリックするのですが、次のようなエラーが又出てしまって困っています。

「コントロールパネルを確認して下さい。既定値のプリンタでエラーが発生した為、印刷できませんでした。原因として幾つかの理由が考えられます。……」

と長い文章のメッセージが出てしまいます。
友人はプリンタを持っておりませんし、マイクロソフトのWebサイトでも必要とする「構成」の説明のところには「プリンタ」が必須とは書いて有りませんでしたし…。
友人としては、自宅で書き込んで会社で印刷するのだそうです。

ただ友人が言いますのには、会社ではLanか何かでプリンタは繋がっているのだそうです。
あと会社での文書(ファイル)作成時には印刷する大きさの青い(ブルー)の枠の中に打ち込んで(書き込んで?)いるのだそうです。

会社のマシンにはWindowsMeが入っているそうで、友人のマシンにはWindows98SEが入っています。
そうそう友人は、Office97からインストゥールしたって言っていました。

友人のマシンは、Athlon1.0GHz,DIMM512MB,GeForce2MX 32MB,Onbord sound,Modem56k(PCI)がおおよその構成です。私が一年前ほどからWin機を使っていたので、つい最近友人を手伝って自作・組み立てた物です。

友人は、仕事の為にMacから乗り換えたので「Win機は解り難い」って言っていましてExcel(Office)97も初めて、私も自作をほんの少し知っている程度で、勿論Excel&Officeも初めて友人宅で触りました。

友人の事なんですが皆様よろしくお願いします。長い説明です、すみません。

友人が会社で作成したExcel97のファイルが自宅のパソコンのExcel97で開けなくてエラーが出るのです。そのエラーとは、

「○(の中に×)プリンタが組み込まれていません。コントロールパネルの[設定]-[プリンタ]コマンドでプリンタを読み込んでください。」

と出るのです。取り合えずキャンセルをクリックするのですが、次のようなエラーが又出てしまって困っています。

「コントロールパネルを確認して下さい。既定値のプリンタ...続きを読む

Aベストアンサー

プリンタを使用しなくても、プリンタは設定しておいたほうがいいですよ。

スタートメニュー/設定/プリンタで一覧表示してプリンタが1つも無い状態だと「印刷プレビュー」等の機能が使用できません。
そこで、プリンタを使わない場合、なんでもいいから適当にプリンタを設定しておきます。

<設定方法>
スタートメニュー/設定/プリンタでプリンタの追加をダブルクリックし、あとは指示にしたがって進めていきます。
プリンタはCanon LBP-740等を適当に選択しておきます。
最後にテスト印刷をするか聞いてくるので「いいえ」を選択します。

QExcel RANK関数 条件に一致する数値の順位

EXCELのRANK関数で条件に一致する数値の順位を出したいのですが、そのような関数は出来ますか?
A列 B列 C列(RANK)
A  10  1
B 9 1
A 8 2
B 7 2
A 6 3
B 5 3

A列とB 列からC列を求めたいのですが、できますか?

Aベストアンサー

昨日同じような質問がありました。
http://oshiete1.goo.ne.jp/qa3850349.html
ANo.2の方の回答が参考になると思います。

QExcelで指定した条件と一致するセルの隣の数値を合計したい。

こんにちは。
今、Excelで「支払日、○○料(何種類もあります)、△月分、金額」という計算表を作っています。
そこで、指定した範囲の中の「○△料」という条件に一致するセルの左隣の「金額」を合計するということをやりたいんです。
自分でIFやCOUNT系を使って試してみましたが、うまくいきません。
詳しい方、どのようにしたらよいか教えてください。

Aベストアンサー

該当する条件が1列なら
=SUMIF(条件の範囲,条件,合計の範囲)
該当する条件が複数なら
=SUM(IF((条件1の範囲=条件1)*(条件2の範囲=条件2),合計の範囲))
でCtrl+Shift+enterで配列数式にするか
=SUMPRODUCT((条件1の範囲=条件1)*(条件2の範囲=条件2),合計の範囲)

QExcelで2つ1組の数値の内、1つの数値を別の数値とセットにする方法

①のシートのA列に型番、B列にシリアルが入っており、②のシートのA列に型番のみが入っています。
①と②の型番は完全一致しているものもあれば、型番の末尾が途切れてしまい完全一致しないものもありますし、数文字しか一致しないものもあります。
②の型番の隣に①のシリアルを入れたいのですが、何かうまく関数を使えば簡単にできるでしょうか?

型番をそれぞれ昇順にして貼り付けようとしたのですが、①と②の型番が完全一致ではないため、同じ並びにならず、そのまま貼り付けることができません。
何かいい方法があれば教えて下さい。
宜しくお願い致します。

例】
①シート
A列 B列
ABC 1234
PQR 2345
STU 5678
XYZ 1209
②シート
A列 B列
TU
XYS
PQR
BC

分かりづらかったらすみません。。。
宜しくお願い致します。

Aベストアンサー

部分的に重複しているような型番もあるのでしょうか?
ABCとABDという型番があり、②に欠けたABという型番があった場合、ABCかABDか判断する方法が無いと思います。
また、②のXYSというのはXYZが間違えて?入力されているような場合を想定していると思われますが、それもどの程度の一致で判断するのでしょう?
②にXYSとあって、①にXYZとEYSが存在した場合、どちらと判定すればよいか分からないと思います。

何らかの判断基準を決めたとして、
まずVLOOKUPで完全一致を探し、一致したもののシリアルを取得します。
フィルタを使い、エラー表示のものだけ表示し、式の内容を変更します。

判断基準の優先度が高いものから順に試します。
場合によっては①のA列とB列の間に列を挿入し、判定用の補助セルとして使います。
例えば、前から5文字一致したら同一とみなす。とした場合、
VLOOKUPとLEFTにより、左から5文字抽出したものが一致した場合にシリアルを取得します。
先ほど同様にフィルタでエラーのものだけ表示させ、また別の条件の式を入力します。

例えば今度は右から5文字一致したら、とかでしょうか。
あるいは②の文字が欠けているとして、②の全てを含むセル。という条件もあるでしょう。
この場合SUMPRODUCTやFIND、INDIRECT、ROW等を使い、一致するものがある列の行番号を取得する必要があると思われます。

データの数にもよりますが、残り少なくなれば判定式を考えるより目で見た方が早いかもしれません。

自分が思いついたのはこの程度です。
人間が条件を指定してあげないと機械も判別できないですよ。
もっと上手いやり方もあるかもしれないので、他の回答者に期待。

部分的に重複しているような型番もあるのでしょうか?
ABCとABDという型番があり、②に欠けたABという型番があった場合、ABCかABDか判断する方法が無いと思います。
また、②のXYSというのはXYZが間違えて?入力されているような場合を想定していると思われますが、それもどの程度の一致で判断するのでしょう?
②にXYSとあって、①にXYZとEYSが存在した場合、どちらと判定すればよいか分からないと思います。

何らかの判断基準を決めたとして、
まずVLOOKUPで完全一致を探し、一致したもののシリアルを取得します。
...続きを読む

QExcelで入力規則の入力時に表示されるメッセージについて

Excel2000を利用しています。

入力規則の設定で入力時メッセージを設定すると
表示されるメッセージ欄(アクティブセルにするとポップアップされる黄色い枠)の
サイズ変更は可能ですか?

コメント機能で、表示されるものは、サイズ変更可能ですよね。
同じようにサイズ変更が可能かどうか知りたいので、よろしくお願いします。

Aベストアンサー

あれはサイズ変更は不可能だと思います。
ただ、もし長いのがいやな場合は、メッセージを入力する際に
改行を使用して、横サイズのみいじるしかないのでは?


人気Q&Aランキング

おすすめ情報