- ベストアンサー
ACCESSDBで、NULLデータをすべて'0'に置き換えたい
アクセスのデータの中にNULLのものがたくさんあります。 これをすべて0に変換したいのですが、 NVL関数はアクセスでは使えないと聞きました。 こういう場合、皆さんはどのような対応をしているか ご教示ください。 よろしくお願いします。
- みんなの回答 (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
その他の回答 (2)
- m3_maki
- ベストアンサー率64% (296/460)
更新クエリを使います。 UPDATE テーブル1 SET フィールド1 = 0 WHERE フィールド1 Is Null;
補足
これだと、フィールド1が指定されてしまいますよね? データの中にはかなりの行と列のNULLデータがあるので、 フィールドは指定したくないのですが・・・。
- ipsum11
- ベストアンサー率21% (55/251)
1.EXCELに全データを貼り付ける 2.NULL(空白)セルを「0」に置き換える ⇒置換 3.置き換えたEXCELデータをコピー 4.コピーしたデータをACCESSのテーブルに貼り付ける
お礼
確かに設計に問題がありますよね。。 ご指摘いただいたとおりだと思います。 なぜそのようなNULLデータがうまれるかというと、 その一つ前のクエリでピボットテーブルを使っていて、 (その結果をINにして再度実行しているクエリで SUMを使っているため、NULLは入ってきてはこまるのですが) どうしても存在しないデータにはNULLが入ってきてしまうのです。 これを0とする方法が私には思いつきませんでした。 今回は別のページで見つけたNZという関数で対応しました。 教えていただいた方法もとてもわかりやすいので、 次回はこちらで試してみたいと思います。 お手数をおかけしてすみません。。 ありがとうございました!