アクセスVBAクエリを使ってかんたん重複チェック

 

アクセス担当のまみです。

 

データの入力をしていると、以前に入力したデータをもう一度入力してしまうってこともあると思います。

一人での作業だと気づきやすいですが、複数人での作業だと気が付けません・・

そんな時に、「以前に入力がありますよ」ってお知らせしてくれるととってもありがたいですね!

 

今回は、そんな二重登録防止のプログラムを作成してみましょう!

 

Contents

データが重複しないように

 

今回、説明のために「宛名印刷」ファイルを使用します。

プログラム作成の基本となる「フォームの作成」、「データの登録」、「データの検索」、「データの修正」、「レコードの削除」を「宛名印刷」ファイルを作成しながら、お伝えしています。

シリーズを読破すると、ついでにはがきの宛名印刷ができるようになっちゃいます。

お時間がありましたら是非、下記の記事から作成してみてください。

 
 
 

 

(はてな君)
二重登録防止って同じデータが登録されないようにってこと?

そうなんです。

データによってどのフィールドをチェックするかは変わってきます。

 

「宛名印刷」ファイルの場合だと、やっぱり「氏名」ですね。

「氏名」の場合だと同姓同名ってこともあって、絶対に重複しないってデータじゃないので、「二重登録なので登録しない。」か「別人なのでそのまま登録する。」のどちらか選べるようにしてみましょう。

 

 
 

それでは、「宛名印刷」ファイルを開きましょう。

 

重複チェックの方法はいくつかあるのですが、今回はクエリを使った方法をご紹介しますね。

 

クエリを使って重複データをチェック!

 

クエリのお話は、以前に少ししたので、下記の記事で復習してみてくださいね。

 

Access クエリを作成してテーブルのデータを抽出しよう

2018年9月13日

 

 
 
 
 
 
 
①「作成」タブから②「クエリデザイン」を左クリックします。
 
 

 

 

ここで、抽出したいデータのテーブルを選ぶのですが、テーブル一つしかないので、もちろん「T_住所録」を選択です。

「追加」を左クリックしたら、「閉じる」を左クリックして閉じておきましょう。

 

今回作成しているクエリは、抽出結果を表示させるという目的ではなく、重複があるか、ないかの件数を取るために作成しています。

 

検索結果の表示が目的ではないので、フィールドは1つだけとかでもいいのですが、説明に丁度いいので、すべて表示させるようにしました。

 

 

フィールドに①「T_住所録.*」を選択しています。*ってすべてのデータって意味なんです。

「氏名」フィールドの「表示」のチェックを外しています。こうすると結果に表示されないんです。と言っても、*の方で表示されますね。

 

二重登録チェックをするために、今回は「氏名」フィールドの「抽出条件」に条件を入れていきます。

 

データを入力している時に、氏名を入力すると、重複していないかチェックするって意味のことをいれたいんですね。

 

 

③「抽出条件」のセルの中で、右クリックして、「ビルド」を左クリックします。

 

 

⑤「宛名印刷」から順番に「Forms」「すべてのフォーム」の前の「+」を左クリックし、「F_データ入力」を左クリックします。

 

⑥「tx氏名」を左ダブルクリックします。

 

 

Forms![F_データ入力]![tx氏名]って自動的に表示してくれるのですが、最後に空白があるので、削除しておきます。

削除しないと思った通りに動いてくれません・・・

 

空白を削除したら「OK」を左クリックしましょう。

 

 

ビルドを使わなくても抽出条件に直接「Forms![F_データ入力]![tx氏名]」を入力してもOKです。

クエリの作成は以上です。さっそく動作確認してみましょう。

 

 

「F_データ入力」画面で、今まで入力したことのある名前を入力し、フォーカスを「氏名」から動かしておきます。

この状態で、「データシートビュー」でクエリを見てみましょう。

 

 

(はてな君)
へぇ~!前に入力した情報がちゃんと表示されてる~!

 

ちゃんと重複チェックができそうですね!

 

クエリは、「Q_重複チェック」と名前を付けておきましょう。

 

Dcountを使って重複チェック

 

 

「F_データ入力」フォームをデザインビューで開きましょう。

 

 

①「tx氏名」を選択した状態で、プロパティーシートの②「イベント」タブを左クリックします。

 

③「フォーカス喪失後」の、右側のを左クリックして、を左クリックしてコードの画面を開きましょう。

 

 

「Private Sub tx氏名_LostFocus()」と「End Sub」の間に、下記のコードを入力します。

 

    Dim nRet As Long

    If DCount("氏名", "Q_重複チェック") > 0 Then
        nRet = MsgBox("既に入力があります。登録しますか?", vbYesNo)
        If nRet = vbYes Then
        Exit Sub
        Else
            Me.tx氏名.Value = ""
            Me.txしめい.Value = ""
        End If
    Else
    End If

 

コードをコピーされたい場合は下記の記事を参考にしてください。

関連記事

 

 

DCount(“氏名”, “Q_重複チェック”)で、「Q_重複チェック」クエリの「氏名」フィールドの数を取り出してくれます。

つまり、「Q_重複チェック」クエリが0より大きいと以前に登録があってメッセージが表示されるってことです。

「はい」を選ぶとこの処理を抜けてそのまま次の入力ができて、「いいえ」を選ぶと氏名がクリアされて、別の人を入力って形になります。

 

これで、「F_データ入力」のフォームビューで動作確認してみましょう。

 

 

(あいちゃん)
入力時に重複チェックしてくれると、とっても便利ですね!

 

 

「F_データ入力」フォームは保存して終了しておいてくださいね!

 

まとめ

 

入力時に二重登録を防止してくれるのっていいですね。

事前にミスを防止してくれるんですね。

 

メッセージボックスって奥が深いなぁ。

 

 

スポンサーリンク