Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2531 / 13645 ツリー ←次へ | 前へ→

【67412】エラーのスルーについて 八家九僧陀 10/12/1(水) 22:04 質問[未読]
【67413】Re:エラーのスルーについて neptune 10/12/1(水) 22:48 回答[未読]
【67427】Re:エラーのスルーについて 八家九僧陀 10/12/2(木) 17:49 発言[未読]
【67428】Re:エラーのスルーについて SK63 10/12/2(木) 18:09 発言[未読]
【67451】Re:エラーのスルーについて 八家九僧陀 10/12/5(日) 17:23 お礼[未読]
【67434】Re:エラーのスルーについて neptune 10/12/2(木) 23:20 回答[未読]
【67450】Re:エラーのスルーについて 八家九僧陀 10/12/5(日) 17:11 お礼[未読]

【67412】エラーのスルーについて
質問  八家九僧陀  - 10/12/1(水) 22:04 -

引用なし
パスワード
   Dim gaku_1 As CurrencyやDim As ritu_1 As Integer 等変数を定義しているTextで、未入力等で空白となった場合、「型が一致しません」とのエラーが出て入力作業が中断して、また最初からFormを開いて入力作業をすることが頻繁に発生します。
作成した私自身はわかっていて、該当数値がなくても、必ず[0]を入力するのですが、第三者が入力(主に使っているのは第三者)する場合、よく発生します。
数値型を変数定義しているTextに関係している部分のみ、一括して「型が一致しません」エラーをスルー(そのまま継続する、無視する)できる方法はありませんか?

【67413】Re:エラーのスルーについて
回答  neptune  - 10/12/1(水) 22:48 -

引用なし
パスワード
   ▼八家九僧陀 さん:
そういう事を防ぐ為に、計算、判断などの処理の前に適正なデータで
あるか否か(例えば、数値型であれば数値であるか)のチェックをします。
↑が王道です。
IsNumeric関数

例えば
if isnumeric(なんかのtext)=true then
  なんかの処理
else
  再度の入力を促すとか。何もしないとか。
end if

【67427】Re:エラーのスルーについて
発言  八家九僧陀  - 10/12/2(木) 17:49 -

引用なし
パスワード
   ▼neptune さん:
>▼八家九僧陀 さん:
>そういう事を防ぐ為に、計算、判断などの処理の前に適正なデータで
>あるか否か(例えば、数値型であれば数値であるか)のチェックをします。
>↑が王道です。
>IsNumeric関数
>
>例えば
>if isnumeric(なんかのtext)=true then
>  なんかの処理
>else
>  再度の入力を促すとか。何もしないとか。
>end if

プログラミングの王道(きっと他にも沢山あるのでしょうが)を勉強せぬまま、見よう見まね(参考書やこの質問箱を利用しながら)で給与ソフト、賞与ソフトを作り、数多くの"王道なし"の計算式VBAを作ってしまいました。
やはりひとつひとつの計算式の関係VBAにご教示いただいたコードを書く以外は方法がありませんか?
「型が一致しません」エラーは全部スルーするという一括でできるVBAなどありませんか?

【67428】Re:エラーのスルーについて
発言  SK63  - 10/12/2(木) 18:09 -

引用なし
パスワード
   ▼八家九僧陀 さん:


>「型が一致しません」エラーは全部スルーするという一括でできるVBAなどありませんか?

ありますが、、、、、後で面倒なことになると予想されます。

on error resume next
をSUB ~~以降に入れるとプロシージャ内ではスルーできますです。

ただし、変数とかを後で使用すると困ったりしますが、
特に入力ミス(日月データ)では困ることは多いでしょうか?

【67434】Re:エラーのスルーについて
回答  neptune  - 10/12/2(木) 23:20 -

引用なし
パスワード
   ▼八家九僧陀 さん:
スルーの件についてはもうアドバイスが出ていますので、こんな感じというのを
書いておきます。

on error resume next
なんかの処理
if err.number=「型が一致しません」エラーの番号 then
なんかの処理2
else
プロシージャを抜けるなどの処理
end if
on error goto 0

///////ここからはおせっかいと言われるかもしれませんけど、あえて///////
>プログラミングの王道(きっと他にも沢山あるのでしょうが)を勉強せぬまま、見よう見まね(参考書やこの質問箱を利用しながら)で給与ソフト、賞与ソフトを作り、数多くの"王道なし"の計算式VBAを作ってしまいました。
>やはりひとつひとつの計算式の関係VBAにご教示いただいたコードを書く以外は方法がありませんか?
コードを書くか、データチェック用の関数を作ってそれを使用するか、
それ以外にも具体的な方法は状況によって違ってくるでしょうが、
基本的に入力を伴うプログラムでは入力データチェックは必須です。

特に金額計算の絡むものについては入力ミスやデータの妥当性のチェック
は絶対に必要です。王道云々とかいうよりもっと前のバグに近い問題で
下手して誤差が発生すると信用を失います。

実際問題、1つの例を挙げるとデータ型を考えずに計算すると円単位で
誤差が発生する場合があります。もしそれが残業計算を含むものであるなら、
なおさら危険性が大きくなります。一円でも間違いは間違いです。
データチェックなしやエラー対策なしはホントに怖いです。桁間違い、
途中までしか計算せずに結果が出てしまうとか。。。。。

現在作成しているもの、作成中のものはもし間違っても責任の持てる
自分の範囲で使用し、他の人に配布するなどはしないことを強くお勧めします。

【67450】Re:エラーのスルーについて
お礼  八家九僧陀  - 10/12/5(日) 17:11 -

引用なし
パスワード
   ▼neptune さん:
>▼八家九僧陀 さん:
>スルーの件についてはもうアドバイスが出ていますので、こんな感じというのを
>書いておきます。
>
>on error resume next
>なんかの処理
>if err.number=「型が一致しません」エラーの番号 then
>なんかの処理2
>else
>プロシージャを抜けるなどの処理
>end if
>on error goto 0
>

コードのご教示ありがとうございます。
ひとつひとつの計算VBAに追記して改良してみます。

>///////ここからはおせっかいと言われるかもしれませんけど、あえて///////
>>プログラミングの王道(きっと他にも沢山あるのでしょうが)を勉強せぬまま、見よう見まね(参考書やこの質問箱を利用しながら)で給与ソフト、賞与ソフトを作り、数多くの"王道なし"の計算式VBAを作ってしまいました。
>>やはりひとつひとつの計算式の関係VBAにご教示いただいたコードを書く以外は方法がありませんか?
>コードを書くか、データチェック用の関数を作ってそれを使用するか、
>それ以外にも具体的な方法は状況によって違ってくるでしょうが、
>基本的に入力を伴うプログラムでは入力データチェックは必須です。
>
>特に金額計算の絡むものについては入力ミスやデータの妥当性のチェック
>は絶対に必要です。王道云々とかいうよりもっと前のバグに近い問題で
>下手して誤差が発生すると信用を失います。
>
>実際問題、1つの例を挙げるとデータ型を考えずに計算すると円単位で
>誤差が発生する場合があります。もしそれが残業計算を含むものであるなら、
>なおさら危険性が大きくなります。一円でも間違いは間違いです。
>データチェックなしやエラー対策なしはホントに怖いです。桁間違い、
>途中までしか計算せずに結果が出てしまうとか。。。。。
>
>現在作成しているもの、作成中のものはもし間違っても責任の持てる
>自分の範囲で使用し、他の人に配布するなどはしないことを強くお勧めします。

ご指摘ありがとうございます。
ただ作成済のものは、すでに経理の人に使ってもらい、いままで手計算(簡単なエエクセルを使って)でしていたために、大変重宝がられ喜んで使ってもらっていますので、なんとか上記のコードを追記して改良して使ってもらいます。
作成したものは、事前に計算結果等を試算して間違いはなかったので計算式や型等は間違いなかったと思っています。ただ実際に使ってもらい、操作上で空欄になってしまう等を想定していなかったので(ご指摘の「基本的に入力を伴うプログラムでは入力データチェックは必須です。」が欠落していました。)、作成済のものは改良し、現在作成中の年末調整用プログラムでは、最初から(いまでは当然、必須のことだと思っています。)ご教示いただいたコードを記述して万全を期したいと思っています。
ご親切なご指摘ありがとうございました。
これからも勉強していきます。
また何かとこの質問箱を利用させてもらいますが、懲りずにご教示お願いします。

【67451】Re:エラーのスルーについて
お礼  八家九僧陀  - 10/12/5(日) 17:23 -

引用なし
パスワード
   ▼SK63 さん:
>▼八家九僧陀 さん:
>
>
>>「型が一致しません」エラーは全部スルーするという一括でできるVBAなどありませんか?
>
>ありますが、、、、、後で面倒なことになると予想されます。
>
>on error resume next
>をSUB ~~以降に入れるとプロシージャ内ではスルーできますです。
>
>ただし、変数とかを後で使用すると困ったりしますが、
>特に入力ミス(日月データ)では困ることは多いでしょうか?

実際、使用しているのは作成した給与計算プログラムで、日付データとしては「支給日」データだけで、それを除く全部(時間外時間数や諸手当の回数等)が数値データです。
例えば、Text時間外手当 = val(Text時間外時間数.Value) * tanka_1等の式で、Text時間外時間数を[0]と入力すれば問題ないのですが、うっかり空白のままで計算ボタン(他の計算も含めて一括計算するようにしている)を押すと「型が一致しません」とのエラーが出てしまうのです。

ただ、プログラムを組むには、入力データのチェックは必須、当然とのご指摘もあり、教えていただいたコードをひとつひとつ追記して改良してみます。

ご親切にありがとうございました。
これからもこの質問箱を利用させてもらいます。
懲りずにご教示の程お願いします。

2531 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free