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'