プロが教えるわが家の防犯対策術!

範囲指定をしてジャンプで「空白セル」を実行すると、きちんとグレー反転するセルがあるのですが、
VBAで
if Isnull(Cells(I,3) then…
と指定すると、そうではないセルとして認識されています。
なぜでしょうか?

A 回答 (5件)

Excelでは「空白セル」はNullではないようです。



If Cells(I,3) = "" Then・・・
と指定すると、「空白セル」として認識されています。
「空白セル」とNull値(何も無い)セルの違いは識者のご登場待ちということで。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

この方法で無事できました!
前までは
**** = "" then
っていう方法をよく使ってたんですが、
これより「IsNull」を使ったほうがいいというのを
ExcelかAccessか忘れましたが、よくいわれたので
使ってたのが逆にダメだったみたいですね。

ありがとうございました。

お礼日時:2004/05/14 18:34

VB、VBAでのNullは難しいですね。

余り使う場合が無いように思う(無知故か?)。APIやC言語プログラム(ポインタや文字列の終端)と関連するレベルのものを考える時に使われる?。
下記テストをやって見ました。
vbNullCharとNullも違うようです。
Sub test03()
Dim x As Variant
ActiveSheet.Cells(1, 1) = IsNull(x)
ActiveSheet.Cells(1, 2) = Len(x)
x = Null
ActiveSheet.Cells(2, 1) = IsNull(x)
ActiveSheet.Cells(2, 2) = Len(x)
x = ""
ActiveSheet.Cells(3, 1) = IsNull(x)
ActiveSheet.Cells(3, 2) = Len(x)
x = vbNullChar
ActiveSheet.Cells(4, 1) = IsNull(x)
ActiveSheet.Cells(4, 2) = Len(x)
x = Chr(0)
ActiveSheet.Cells(5, 1) = IsNull(x)
ActiveSheet.Cells(5, 2) = Len(x)
x = &H0
ActiveSheet.Cells(6, 1) = IsNull(x)
ActiveSheet.Cells(6, 2) = Len(x)
End Sub
普通セルの値がDelキーを押した状態を判別するなら
=""やIsEmptyでしょうか。
ただし=""を入れて
Sub test06()
If IsEmpty(Cells(5, "c")) = True Then
MsgBox "Empty"
Else
MsgBox "NotEmpty"
End If
を実行するとNotEmptyになるので、値だけを判別しているのではなさそうです。
参考
http://www.akj.co.jp/aug/qa/ans0001-0050/0159.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
詳しい説明&実験?ありがとうございました。

今回は#3の方の方法で無事解決しましたが、
時間があるときに試してみたいと思います。

ありがとうございました。

お礼日時:2004/05/14 18:37

空白(未使用)セルのとき True にするのあれば、



If IsEmpty(Cells(I, 3)) Then

のようにすると良いでしょう。

If Cells(I, 3).Value = "" Then とか
If Cells(I, 3).Value = vbNullString Then 
のようにすると Cells(I, 3)に「式」が設定されていて、
その演算結果がNullString("")のときも True になります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

IsNullではなくIsEmptyなんですね。
ひとつ勉強になりました。

ありがとうございました。

お礼日時:2004/05/14 18:35

上記の式だとIsnullの閉じカッコがないようですが、書き間違えですか?

    • good
    • 0
この回答へのお礼

はい、すいません、書き間違いです(>_<)
すいませんでした。

お礼日時:2004/05/14 18:33

Cellsは「Cells(行番号,列番号)」のように、行と列を数値で指定します。

列番号はA列なら1、B列なら2になります。
従って「Cells(I,3)」は「セルI3」ではありません。
「Cells(I,3)」は「変数Iに入っている値の行の、C列」です。変数Iに「1」が入っていればセルC1を、変数Iに「100」が入っていればセルC100を参照します。
Cellsで「セルI3」を参照する場合は「Cells(3,9)」です。
    • good
    • 0
この回答へのお礼

もちろんわかってます。
値を取得したいのは、C列のもので、変数iによって行が変化していくセルの値です。

お礼日時:2004/05/14 11:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています