2011-12-15 19 views
24

私は、次のVBAコードを使用していますVBA(Excel)のEmptyとIsEmpty()の違いは何ですか?

Do While .Cell(i,1) <> Empty 
    ' doing things 
    i = i+1 
Loop 

Excelで(ダブル/整数値を持つ)の列を反復処理します。次に、セルの値が0になるたびにテストがFalseに評価されるケースを見つけました。このケースと実際のケースの違いは何か分かりません。

私がテストを変更する場合:

Do While Not IsEmpty(.Cell(i,1)) 
    .. 
Loop 

それが正常に動作します。だから私の質問は:IsEmpty()とEmptyの評価方法の違いは何ですか?どのような場合will = Emptyは値0のセルでTrueに評価されますか?

+2

'レンジ( "A2")= '0'?レンジ( "A2")= Empty'' 'true'に?のisEmpty(範囲( "A2" )) '' False'セル値0 = EmptyがFalseを返す場合を見たいと思います! –

+0

あなたは正しいです。今まで私が見たシリーズにはゼロが含まれていないことがわかりました(私は彼らがやったと仮定しました)ので、その動作は一貫しています。 – Christian

答えて

26

Emptyが可変であることに意味そのデフォルト値でしたがって、値が0のセルがEmptyかどうかを確認すると、trueを返します。

IsEmptyは、値が初期化されていないことを示します。

一言で言えば、セルが空であるかどうかを確認するには(値に何も存在しないので)、IsEmptyを使用します。何かが現在デフォルト値になっているかどうかを確認するには、Emptyを使用します。ヘルプから

+1

私はExcelセルのデフォルト値が0であることに気付きませんでしたが、それは知っておきたいことです。 – Christian

+4

はいIsEmptyを使用して、セルが空であるかどうかを確認します。しかし、Emptyは値が0の定数です。変数がデフォルト値であることを指していません。つまり、Enumの一部で値がゼロのvbEmptyへのショートカットです。 Excelセルのデフォルト値は、値がないこと(IsEmpty)です。これを数値変数に代入すると、ゼロに変換されます。 –

+0

@ Jean-Francois:あなたは正しいです:VBAヘルプから - EmptyキーワードはVariantサブタイプとして使用されます。初期化されていないVariant変数の値を示します。 –

-4

私のisEmptyは、その空の場合はそう細胞とチェックの戻り値をとるだけの方法であると考えている: のisEmpty(.Cell(iは、1))い - >

​​
+0

@Christian 'Not IsEmpty(Sheets(" Results ")。セル(i、1))'あなたはurロジックではないと思いましたか? –

+0

残念ながら、これは私のシステムでは当てはまりません。 'Do not Not IsEmpty(シート(結果))。シート(結果)。セル(i、2).Value =(シート(結果))。 Loop' 隣接するブール値の列を取得します.0はFalseに対応し、その他の値はTrueに対応します。 – Christian

+0

IsEmpty()は論理的に<> Emptyと同じでなければならないと思いませんか? I. <> Emptyステートメントがfalseに評価された場合、Not IsEmpty()条件のループは終了する必要があります。 – Christian

4


のisEmpty Trueを返し、変数が初期化されていない、または明示的にに設定されている場合。それ以外の場合は、Falseを返します。式に複数の変数が含まれていると、常にFalseが返されます。
IsEmptyは、バリアントの意味のある情報のみを返します。

セルが空であるかどうかを確認するには、cell(x,y) = ""を使用できます。
あなたは最終的にRange("X:Y").SpecialCells(xlCellTypeBlanks)またはxlCellTypeConstantsまたはxlCellTypeFormulasを使用して時間を節約するかもしれない

+5

'cell(x、y)=" "'は空でないセルに対して '=" "'を返します。したがって、IsEmpty(cell(x、y))を使うのが一貫しています。 BTW 'cell(x、y)'はVariantを返すので、IsEmptyの教科書です。 –

関連する問題