Access Tips by pPoy

  
トップへ←Top    QueryへQuery  FormへForm  ReportへReport  Module(Sub)へSub  Module(Function)へFunction  ExcelへExcel  Etc.へEtc.  Word連携へWord

Module テーブル内のNull値を全て0に置き換える関数  (Ac97,Ac2000,Ac2002)
Accessのクエリー内で、フィールドの値を元に計算する場合、
Null値のあるフィールドを含んだ計算結果は、全てNullとなってしまい、正しい結果が得られません。

(Excelの場合は、空白若しくは未入力のセルを含む計算は、その部分を0と見なして計算します。)

Excel からインポートしたデータには注意が必要です。 
また、メインフレームなどのデータを落として Access で加工する場合も同様です。
これは、更新クエリーを使用することによって、0に変換することができます。

但し、項目 (フィールド) 数が多い場合は、
それぞれに更新クエリーを実行しなければいけないので結構面倒です。

これは、VBA を使用して、一気に Null 値を零に変換する関数です。
以下の関数を標準モジュールに貼り付けてください。

1.DAO 使用の場合 ≪DAOnullToZero(テーブル名) ≫
Function DAOnullToZero(tblName) As Boolean

' DAO を使用して、データの中のNull値を全て0に変換する
' 2001/10/20 pPoy

On Error GoTo Err_DAOnullToZero
    Dim rst As DAO.Recordset
    Dim fldValue As Variant
    Dim cnt As Long
    
    Set rst = CurrentDb.OpenRecordset(tblName)
    
    Do Until rst.EOF
        For cnt = 0 To rst.Fields.count - 1
            If cnt = 0 Then GoTo fldnext
            fldValue = Nz(rst(cnt), 0)
            rst.Edit
            rst(cnt) = fldValue
            rst.Update
fldnext:
        Next cnt
        rst.MoveNext
    Loop
    
    rst.Close

    DAOnullToZero = True
    
DAOnullToZero_Exit:
    Exit Function
    
Err_DAOnullToZero:
    DAOnullToZero = False
    Resume DAOnullToZero_Exit

End Function 


Sub Text() ' 呼び出し用です。 If DAOnullToZero("[テーブル1]") = True Then MsgBox "無事終了", vbOKOnly Else MsgBox "失敗しちゃった", vbOKOnly End If End Sub
2.ADO 使用の場合 ≪ADOnullToZero(テーブル名) ≫
Function ADOnullToZero(tblName) As Boolean

' ADO を使用して、データの中のNull値を全て0に変換する
' 2001/10/20 pPoy

On Error GoTo Err_ADOnullToZero

    Dim rst As New ADODB.Recordset
    Dim fldValue As Variant
    Dim cnt As Long
    
    rst.Open tblName, CurrentProject.Connection, , adLockOptimistic
    Do Until rst.EOF
        For cnt = 0 To rst.Fields.count - 1
            If cnt = 0 Then GoTo fldnext
            fldValue = Nz(rst(cnt), 0)
            rst(cnt) = fldValue
            rst.Update
fldnext:
        Next cnt
        rst.MoveNext
    Loop
    rst.Close
    
    ADOnullToZero = True
    
ADOnullToZero_Exit:
    Exit Function
    
Err_ADOnullToZero:
    ADOnullToZero = False
    Resume ADOnullToZero_Exit

End Function
≪使い方≫

使用方法は2通りあります。

呼び出し用の部分の関数名と引数であるテーブル名を変更し、
この Sub Text() から End Sub の間で、
「F5」キー を押します。

変換終了後メッセージが表示されます。

もう一つの方法は、イミディエィト・ウィンドウで実行する方法です。
この場合は、?に続けて関数名を引数をつけて入力し、エンターを押します。
例: ?ADOnullToZero("[テーブル1]")

「True」 と表示されたら、処理終了です。

≪注意≫

Access2000 や Access2002 で、1.の関数を使用する場合は、DAO への参照設定が必要です。



【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
  form mail はこちら

Copyright(C) pPoy 2001