電子書籍の厳選無料作品が豊富!

アクセスのデータの中にNULLのものがたくさんあります。
これをすべて0に変換したいのですが、
NVL関数はアクセスでは使えないと聞きました。

こういう場合、皆さんはどのような対応をしているか
ご教示ください。

よろしくお願いします。

A 回答 (3件)

すべての標準テーブルのすべてのフィールドに対しNullなら0に置き換えてます。

(フィールドタイプは見てません。)
そもそもNull許可しているのならNullがあってもよいように処理設計すべきだし、
0でなくてはならないのならNullを許可しないようにすべきです。
----
Sub mColGet()
Dim CAT As ADOX.Catalog
Dim TB As ADOX.Table
Dim CL As Column
'接続
Set CAT = New ADOX.Catalog
CAT.ActiveConnection = CurrentProject.Connection
'検索
For Each TB In CAT.Tables
If TB.Type = "TABLE" Then
For Each CL In CAT.Tables(TB.Name).Columns
Call mZeroSet(TB.Name, CL.Name)
Next CL
End If
Next TB
'終了
Set CAT = Nothing
End Sub
Sub mZeroSet(strTable As String, strCol As String)
Dim cn As ADODB.Connection
Dim RS As ADODB.Recordset
Dim SQL As String
'接続
Set cn = CurrentProject.Connection
'更新
SQL = "UPDATE " & strTable & " SET " & strCol & " = 0 WHERE " & strCol & " Is Null "
cn.Execute (SQL)
'終了
cn.Close
Set cn = Nothing
End Sub
    • good
    • 0
この回答へのお礼

確かに設計に問題がありますよね。。
ご指摘いただいたとおりだと思います。

なぜそのようなNULLデータがうまれるかというと、
その一つ前のクエリでピボットテーブルを使っていて、
(その結果をINにして再度実行しているクエリで
SUMを使っているため、NULLは入ってきてはこまるのですが)
どうしても存在しないデータにはNULLが入ってきてしまうのです。
これを0とする方法が私には思いつきませんでした。

今回は別のページで見つけたNZという関数で対応しました。
教えていただいた方法もとてもわかりやすいので、
次回はこちらで試してみたいと思います。
お手数をおかけしてすみません。。

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

お礼日時:2009/03/05 17:41

更新クエリを使います。



UPDATE テーブル1 SET フィールド1 = 0
WHERE フィールド1 Is Null;

この回答への補足

これだと、フィールド1が指定されてしまいますよね?
データの中にはかなりの行と列のNULLデータがあるので、
フィールドは指定したくないのですが・・・。

補足日時:2009/03/05 14:28
    • good
    • 0

1.EXCELに全データを貼り付ける


2.NULL(空白)セルを「0」に置き換える
  ⇒置換
3.置き換えたEXCELデータをコピー
4.コピーしたデータをACCESSのテーブルに貼り付ける
    • good
    • 0

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

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