• ベストアンサー

【エクセル】ActiveCellはなぜNullではないのでしょうか?

私は今まで新規のシートを挿入した際のActiveCellは、Nullだと思っていたのですが Sub Empty空白なら() If ActiveCell.Value = Empty Then Debug.Print "空白セルです" End Sub Sub Null空白なら() If ActiveCell.Value = Null Then Debug.Print "空白セルです" End Sub Sub Null空白なら2() If IsNull(ActiveCell.Value) = True Then Debug.Print "空白セルです" End Sub VBAでこのコードを実行すると Emptyの方だけ「空白セルです」となりました。 (1)なぜ空白でもNullだと反応しないのでしょうか? (2)NullとEmptyの違いはなんですか? ご教授よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

Sub test() Sheets.Add Debug.Print ActiveCell.Address End Sub を実行すると、$A$1が返ってきますので、新規シートのActiveCellは、A1セルになっている事が分かります。従って普通のシートの、未使用のセルと同じ事です。セルの値はVariant型なので、初期値はEmptyという事の様です。 田中氏のウェブサイトより Empty値とはバリアント型変数に格納できる特殊な値で、バリアント型変数が初期化されていない状態を表します。Empty値は、数値では0と評価され、文字列としては長さ0の文字列と評価されます。※ Null値とはバリアント型の変数に格納できる特殊な値で、バリアント型変数内に有効な値が入っていないことを意味します。Null値は、バリアント型変数が初期化されていない状態を表すEmpty値や、長さ0の文字列を表すNull文字列(これが""?)とは異なります。 ※他にNull文字(vbNullChar、文字コード0)、値0の文字列=Nullポインタ(vbNullString)なんてのもあって混乱しますね。

noname#150498
質問者

お礼

セルの値はVariant型なのですね。 覚えます。 いろいろあって難しいですね。 ありがとうございます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

>ActiveCellはなぜNullではないのでしょうか この質問の仕方おかしい。ActiveCellと関連づけるのは。言うならシート作成当初の未入力セルか? >ActiveCellはなぜNullではないのでしょうか これはエクセルの仕様というしかない。 他言語や他ソフトを経験しているから、質問のことを、いうのであると思う。エクセルは表計算ソフトで始まって、はじめはマクロやVBAも無かったわけだし、大衆を相手のソフトで有るわけだから、判りやすい使いやすいほうが良い。当初にMS社のエクセル設計者がどう考えたかなど、今さらわかりようも無いが。 判りやすくスペースで埋める当初設計もありえたと思う。 ACCESSのNULLやSQL処理系のNullの扱いなど、私個人からすると、わずらわしく、エクセルはいいなあと思う。 ーー Emptyというのが有るが、あまり使ったことなし。 ここの質問コーナーの質問で答える程度では""一本やりで十分だった。 参考記述 http://www.moug.net/tech/exvba/0100021.htm >Null値とEmpty値は間違いやすいので注意が必要です。Null値はバリアント型(Variant)に有効なデータが入っていないことを示す値であり、Empty値は変数が初期化されていないことを示す値です。Empty値は数値としては0と評価され、文字としては長さ0の文字列("")と評価されます。 === 自分の理論を当てはめるのもよいが、いきなりVBAコード掲出から始まるのでなくて、 具体的にエクセルで、何を(どういう場合を)判定したいのか、具体的に文章で挙げて質問したら。

noname#150498
質問者

お礼

すいませんでした。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

VBAの場合Nullは""であらわしたほうが良かったような…気がします。 If ActiveCell.Value = "" Then Debug.Print "空白セルです" Empty はバリアント型 (Variant) の 1 つで、変数に格納されている値が初期化されていないことを示します。 Null は、バリアント型 (Variant) の 1 つで、有効な値が変数に格納されていないことを示します。 良くわからないですがそうゆうことらしいです。

noname#150498
質問者

お礼

なんだか難しいですね 笑 ありがとうございます。

関連するQ&A