[ Access-VBA ] 式に未定義関数 ‘Nz’ があります ( Nz を棄て IIf / IsNull へ )

Pocket

Access に発行した SQL にある Nz 関数が未定義であるとのことで、SQL の実行エラーとなってしまう事象が発生しました。激おこプンプン丸です。このような面倒くさいのは要らないと言われ続けてウン10年、それでも元気にやってまいりました。

スポンサーリンク

式に未定義関数 ‘Nz’ があります

Why not?

アクセスには Nz 関数が存在します。以前には、下記のような記事も書いています。ざっくり要約すると、Access の Sum 関数は Null が混入すると、結果はずべて Null になってしまうという内容です。

しかし、ADODB.Connection を使ってエクセルからアクセスに接続して Nz 関数を含む SQL を実行しようとしたところ、『 式に未定義関数 ‘Nz’ があります 』 とのエラーが発生してしまいました。

SQL は Access で処理されるため、本来 SQL の発行元は Excel だろうと、Access だろうと関係ないはずです。しかし、Nz 関数は未定義とのことで SQL は残念ながら失敗してしまいます。

エラーとなる原因は残念ながら分かりませんでしたが、何かの拍子に分かるかもしれないので、ログとして実行環境は残しておきます。

  • Windows7 / Excel2007 / Access2007
  • データベースのテーブル名及びカラム名に日本語を使用
  • ADODB.Connection の Execute 関数で NG

Nz 関数を諦め IIf 関数と IsNull 関数を使う

対応方法は Nz 関数が定義されていないのですから仕方がありません。定義されていると認識される関数を利用して SQL を修正します。Nz 関数の代替には IIf 関数と IsNull 関数を使用しました。

Select 
    Sum(IIf(IsNull(お小遣い), 0, お小遣い)) As お小遣い
From
    残金ほぼゼロテーブル
Where
    へそくり = '1'
参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *