EMPTYと0の区別

解決


GG  2005-01-28 13:20:12  No: 119252  IP: [192.*.*.*]

はじめまして
    VB6  SP6  で
    Doubleの変数で
      EMPTYと0の区別できる方法があれば教えて下さい?

編集 削除
魔界の仮面弁士  2005-01-28 13:41:33  No: 119253  IP: [192.*.*.*]

Empty値を保存できるのは、Variant型だけです。
Double型に入れてしまうと、その時点で 0 に変換されてしまいます。

変換された後で判断する事はできませんから、変換前に判断してください。


で、Emptyかどうかを判断する方法は幾つかありますが、基本的には
  If IsEmpty(V) Then
もしくは、
  If VarType(V) = vbEmpty Then
のいずれかを使うのが良いでしょう。

編集 削除
G  2005-01-28 13:51:09  No: 119254  IP: [192.*.*.*]

魔界の仮面弁士さん  ありがとうございます
Variant型で行うことにします

質問ですが
 If VarType(V) = vbEmpty Then

 If V = Empty Then

 If IsEmpty(V) Then

 If V = Empty Then

If IsEmpty(V) Then

If VarType(V) = vbEmpty Then

のそれぞれの違いを教えてもらいませんか

編集 削除
魔界の仮面弁士  2005-01-28 14:13:03  No: 119255  IP: [192.*.*.*]

> If V = Empty Then
これでは駄目ですよ。

ヘルプを見ていただくとわかりますが、Empty は
「数値のゼロ」とも「長さゼロの文字列」とも一致する
特殊な値なのです。

つまり、
  Dim V As Variant
  V = Empty
  If (V = 0) Then
とか
  Dim V As Variant
  V = Empty
  If (V = "") Then
などのコードに対しては、いずれも True として扱われます。


ですから、「If V = Empty Then」という構文ですと、
Vが「Empty」の時だけではなく、「0」や「""」とも
一致してしまう事になります。


> If IsEmpty(V) Then
> If VarType(V) = vbEmpty Then
この2つは、動作的には一緒です。

IsEmpty()は、「Emptyかどうか」を True/Falseで返します。
一方の VarType() は、「データ型をあらわす値」を返します。

似た物として、TypeName()という「データ型を文字列で返す」関数もあります。
詳細はヘルプで確認してみてください。

編集 削除
GG  2005-01-28 16:24:07  No: 119256  IP: [192.*.*.*]

魔界の仮面弁士  ありがとうございました
わかりました

たまたま見たソースに
つまり、テキストボックスの空欄チェックのところで
  IF  AAA.text=empty then
とあったにですが
  IF  AAA.text="" then
と同じで
String型だったのでIsEmptyでは、Falseになっていたと言うことですね

問いの部分と混同してました

編集 削除
GG  2005-01-28 16:26:00  No: 119257  IP: [192.*.*.*]

解決チェックし忘れました

編集 削除
GG  2005-01-28 16:26:03  No: 119258  IP: [192.*.*.*]

解決チェックし忘れました

編集 削除