IIF関数の、使い方に、ついて、教えて下さい

タグの編集
投稿者 じょにー  (社会人) 投稿日時 2009/11/4 03:22:52
VB6で、フォームに、テキストボックスと、コマンドボタンを1つづつ貼り付けている状態で、下記の様なコードを書いて
Private Sub Command1_Click()
Dim number As Integer
number = IIf(IsNumeric(Text1.Text) = True, CInt(Text1.Text), 0)
End Sub
実行して、テキストボックスに数値を書くと、問題無く、変換して、終了しますが、数字以外を書くと、型が、違います。と、エラーになります
僕の予定では、数値以外なら0が、入る、予定でしたが。IIF関数の使い方、考え方が、間違っていますか?
投稿者 daive  (社会人) 投稿日時 2009/11/4 03:51:12
>number = IIf(IsNumeric(Text1.Text) = True, CInt(Text1.Text), 0)
文字列が入ったら、エラーになるように作成しています。
IIF関数の式の評価と、True、Falseの時の、True/False時に実行される部分の、
評価が、何時行われるかについて、自分なりに、調べるなり、テストしてみるなり。
エラーになっている部分は、お判りですよね?

IIFは、有るけど、余り使われない関数/コマンドの一つです。
使われない理由の一つが、今回の様な場合に、
エラー処理を行いにくい、1行が長くなりがち。
上手に使えば、コードが見やすくなりますが、
IIF部分でエラーが起きた場合には、デバッグが面倒だと思います。

使いどころが、限られますが、知っていると、たまーに使える場面がでてきます。

普通は、IF文/SELECT文など、条件文で書いた方が、
デバッグしやすいです。
投稿者 neptune  (社会人) 投稿日時 2009/11/4 04:03:42
書き込もうと思ったらdaive さんがもう書かれていましたので、
資料情報だけ。

資料としてはMSDNのIIf関数の解説の部分に理由は書いてます。
読んだら納得すると思います。

>普通は、IF文/SELECT文など、条件文で書いた方が、
>デバッグしやすいです。 
これに一票
投稿者 じょにー  (社会人) 投稿日時 2009/11/4 17:58:56
daiveさん、neptuneさん、ご解説、有難うございました
iif関数の考え方を、間違えていました
変数 = Iif(条件式,真,偽)
の場合、真も、偽も、実行していて、どちらか、一方を戻しているのですね
どちらか、一方を、実行したく無い場合は、if文で、やった方が、いいのですね?この、考え方で、合っていますか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/11/4 19:01:18
> iif関数の考え方
> Iif(条件式,真,偽)
「IIf」が正しいスペルです。もっとも、大文字小文字は区別されないので
iif や Iif でも間違いではありませんが。


> 変数 = Iif(条件式,真,偽)
> の場合、真も、偽も、実行していて、どちらか、一方を戻しているのですね
その通りです。
VB6 の IIf 関数も VB.NET の IIf 関数も、真偽両方が実行される事になっています。
(ちなみに JET SQL の IIf 関数や、VB.NET の If 三項演算子の場合は、一方しか処理しません)

この事は、ここ“Visual Basic 中学校”の VB6 テクニック のページにも書かれていたりします。
http://homepage1.nifty.com/rucio/main/technique/Function.htm


> 一方を、実行したく無い場合は、if文で、やった方が、いいのですね?
そうですね、今回の場合には If ステートメントを用いた構文に書き換えた方が良いでしょう。
投稿者 じょにー  (社会人) 投稿日時 2009/11/4 19:14:25
魔界の仮面弁士様、詳しい、ご解説、有難うございます、大変、勉強になりました
自分では、理解していた、つもりが、まだまだ、勉強不足なのを、痛感いたしました