HOME > 即効テクニック > AccessVBA > エラー処理・入力チェック > データ入力時に重複データをチェックする

即効テクニック

エラー処理・入力チェック

データ入力時に重複データをチェックする

(Access 97)
●概要●
フォームでのデータ入力時に、すでにそのデータが入力されているかどうかをチェックします。

●手順●
・テーブル
【住所録テーブル】
----------------------------------------------------------
フィールド名    データ型        サイズ      (AC97の場合)
----------------------------------------------------------
ID              オートナンバー
氏名            テキスト型      20文字      40バイト
会社名          テキスト型      40文字      80バイト
郵便番号        テキスト型      8文字       8バイト
住所            テキスト型      100文字     200バイト
電話番号        テキスト型      13文字      13バイト
----------------------------------------------------------

・フォーム
【住所録入力フォーム】
住所録テーブルをレコードソースとした連結フォーム。

●サンプルコード●
今回は[氏名][会社名][電話番号]の3つのフィールドが全て同一の場合に、重複データであると判断します。同姓同名、同じ会社、家族(同じ電話番号)を許可するためです。
電話番号のBeforUpdate/更新前処理イベントにコードを記述します。
Private Sub 電話番号_BeforUpdate(Cancel As Integer)
    Dim strName    As String        '氏名
    Dim strCompany As String        '会社名
    Dim strTelNo   As String        '電話番号
    Dim strSQL     As String        'SQL文
    Dim Rst        As DAO.Recordset 'レコードセット

    'フォームに入力された項目を取得
    strName = Me.氏名
    strCompany = Me.会社名
    strTelNo = Me.電話番号

    'SQL文の発行
    strSQL = "Select * From 住所録テーブル " & _
             "Where 氏名 = '" & strName & "'" & _
             " And 会社名 = '" & strCompany & "'" & _
             " And 電話番号 = '" & strTelNo & "'"

    'レコードセットを取得
    Set Rst = CurrentDb.OpenRecordset(strSQL)

    '重複チェック
    If Rst.RecordCount > 0 Then
        '重複があった場合は、メッセージを出し更新を中止する
        MsgBox "既に入力されているデータです!!"
        Set Rst = Nothing
        Cancel = True
        Exit Sub
    End If

    '終了処理
    Rst.Close
    Set Rst = Nothing
End Sub
●詳細●
サンプルプロシージャではVBAによって作成した選択クエリを元にしたレコードセットを作成し、そのレコード数を判断することによって重複データの有無をチェックしています。  VBA中でのSQL文の作成方法、特に変数を文字列の中に組み込む方法に注意して下さい。

また、重複データが見つかった場合は、CancelパラメータにTrueを代入してレコードの更新を中止しています。これも良く使う手法です。ただし、その後にプロシージャを抜けるためのExit Subステートメントを書くことを忘れないようにして下さい。そうしないと、その後の部分に書かれている処理も実行されてしまいます。

●備考●
Access2000の場合、デフォルトではDAOに参照設定されていません。Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOのチェックを持ってきて下さい。