プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。

AccessVBAでコーディングを始めたのですが、
NULLの判定で分からない点がでてきました。


データベースより

If rs.Fields(0) = Null Then
Else
区分 = rs.Fields(0)
End If

この場合、rs.Fields(0)の中身がNULLの場合は
rs.Fields(0)のデータを入れるとエラーになるので
ELSEで逃がしたいのですが、
中身のデータがNULLにもかかわらずELSEの方を通ってしまいます。

If rs.Fields(0) Is Null Then
Else
シール = rs.Fields(0)
End If

こちらかとも思いましたが、オブジェクトが必要とエラーが返ってきました。

NULLをIF分で判定したい場合どのような記述を行えばよいでしょうか。

どうぞよろしくお願い致します。

A 回答 (2件)

Q、NULL値の判定?


A、IsNull()を使います。

http://office.microsoft.com/ja-jp/access-help/HA …

For Each fld In .Fields
  With fld
  C = C + 1
    Select Case .Type
      Case adBoolean ' ブール型
        DataValues(R, C) = IIf(.Value = -1, "Yes", "No")
      Case adChar, adVarChar ' 文字列型
        DataValues(R, C) = Nz(.Value, "")
      Case adDBDate, adDBTimeStamp ' 日付型、日付/時刻型
        DataValues(R, C) = .Value
      Case adSmallInt, adInteger ' 整数
        DataValues(R, C) = FormatNumber(.Value, 0)
      Case adSingle, adDouble ' 浮動小数点型
        DataValues(R, C) = FormatNumber(.Value, 2)
      Case adCurrency ' 通貨型
        DataValues(R, C) = FormatCurrency(.Value, 2)
      Case Else
        DataValues(R, C) = .Value
    End Select
End With
Next fld

Null値があれば何かと不便。
ですから、私は、列の型に応じて変換して代入しています。

なお、Nz()はIsNull()で書くこともできます。

V = IIf(IsNull(.Fields(0)), "", .Fields(0))
V = IIf(IsNull(.Fields(0)), 0, .Fields(0))
    • good
    • 0
この回答へのお礼

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

質問以上のご回答頂き
勉強になります。

NULLの対処について今後是非とも参考にさせて頂きたいと
思います。

お礼日時:2013/09/09 13:21

Access からしばらく遠ざかっているのでスパッと答えられませんが、


IsNull 関数で判定するのではなかったでしょうか?
If IsNull(rs.Fields(0).Value) THen

それと、Field オブジェクトの既定のプロパティは Value なので省略可能なのはわかりますが、
Value の評価なのかオブジェクト変数の評価なのかわからなくなるので
rs.Fields(0).Value と省略せずに書いたほうが良いと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
問題なく処理がとおりまし。

また、省略についてのご指摘ありがとうございます。
早速、修正致しました。

お礼日時:2013/09/09 13:20

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