- PR -

TextBox入力値による演算時のNull項目によるエラーの回避方法は?

投稿者投稿内容
かっち
会議室デビュー日: 2004/04/04
投稿数: 5
お住まい・勤務地: でっかいどう北海道
投稿日時: 2004-04-04 14:27
初めて、会議室を使わせていただきます。
ExcelVBAにて、損益計算書の入力フォームを作成しております。
ユーザーがTextBoxに金額入力した際に、小計・合計を自動計算したく、TextBoxのExitイベント発生時に、TextBox.valueの演算プロシージャを実行したいのですが、演算するTextBoxの中にNull項目があった場合、実行時エラー13「型が一致しません」が発生してしまいます。
Null項目は0と見做した上で、汎用的に演算する方法がありましたら、お教え頂きたいのですが。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-04 15:18
演算する前にチェックする

そういうことではなく?
かっち
会議室デビュー日: 2004/04/04
投稿数: 5
お住まい・勤務地: でっかいどう北海道
投稿日時: 2004-04-04 17:26
説明不足ですみません。
当初は、演算の都度個別にNullかどうかを判定し、if文で分岐させようかと思ったのですが、何かスマートな方法が無いものか、模索しているところであります。
ちなみに、オブジェクト及び演算は下記のイメージです。
@TextBoxが32個あり、それぞれはdata(1)〜data(50)の変数に格納。
Adata(3)〜data(23)の合計をdata(24)に格納。
Bdata(25)〜data(26)の合計をdata(27)に格納。
Cdata(28)〜data(30)の合計をdata(31)に格納。
D「data(1)-data(2)-data(24)+data(27)-data(31)」の演算結果をdata(32)に格納。
Edata(24)、data(27)、data(31)、data(32)は、入力せず演算結果表示のみ。
何れかのTextBoxのExitイベント発生時に、都度A〜Dの演算を行いたいのです。
なお、A〜Dの演算は、独立したプロシージャとし、全てのTextBoxのExitイベント発生時にCall文にて参照します。
型不一致エラーを回避し、スマートに演算する方法は無いでしょうか。
かっち
会議室デビュー日: 2004/04/04
投稿数: 5
お住まい・勤務地: でっかいどう北海道
投稿日時: 2004-04-05 00:58
お騒がせ致しました。
解決致しました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-05 08:46
 どうやって解決したのか、書いていただきたいのですが。。。

 私なら、TextBoxを継承してコントロールを作り、「必ず数値を返す」プロパティを追加する、かな。。。
かっち
会議室デビュー日: 2004/04/04
投稿数: 5
お住まい・勤務地: でっかいどう北海道
投稿日時: 2004-04-07 00:50
Jittaさん こんばんは。
自問自答で終結してしまい、申し訳ございません。
TextBoxを格納した配列変数を、演算時にVAL関数を経由させることで、Null項目を0と見做して単純演算することが出来ました。
Val(data(i)) + Val(data(j)) ・・・

この会議室は、よく拝見すると高度な次元の方の議論の場のようで、私のようなVBA初心者がお邪魔するには場違いだったような感があります。
間の抜けた質問をしてしまい、申し訳ございません。
でも、また困ったときは助けていただければと思います。ありがとうございました。
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-07 01:13
引用:

かっちさんの書き込み (2004-04-07 00:50) より:
TextBoxを格納した配列変数を、演算時にVAL関数を経由させることで、Null項目を0と見做して単純演算することが出来ました。
Val(data(i)) + Val(data(j)) ・・・


こんばんは。

詳しいことは一切見てませんが、
一つ気になったことがありましたので。
自分の記憶によれば、val関数はすべて入力に対して正しく動作するわけではない
と思います。どんな場合だったか忘れましたけど。
なんのチェックもなしでいきなりvalだと、
入力の値によって正しく動作しないことが出てきます。
もし、ifで未入力の場合だけval関数を使うなら、意味がないですよね。
_________________
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-04-07 01:38
# 既に解決されてるようですが・・・

TextBoxからExitするたびに、そのTextBoxの値だけをチェックして、
NULL(や、その他数値として評価できない値)だったらTextBox自体に
0を入れてしまうというのは?
愚直な方法ですけど、計算するたびに全部チェックする必要はないですし、
愚直な分確実でわかりやすいかと。

それと、多分既にお気づきでしょうが

引用:

Jittaさんの書き込み (2004-04-05 08:46) より:

 私なら、TextBoxを継承してコントロールを作り、「必ず数値を返す」プロパティを追加する、かな。。。



引用:

かっちさんの書き込み (2004-04-04 14:27) より:

ExcelVBAにて、損益計算書の入力フォームを作成しております。



だそうなんで、それは無理かと・・・。
# VBAでマクロ書いてると、心底 .net や Java が羨ましくなることってありますけどね・・・。

[ メッセージ編集済み 編集者: Cluster 編集日時 2004-04-07 01:51 ]

スキルアップ/キャリアアップ(JOB@IT)