目次
ACCESSの主キーのように重複登録させない
こんにちは。伊川(@naonaoke)です。
重複登録をさせないようにすることを、Excelのユーザーフォームで作成します。
上の記事は、ACCESSですが、Excelで再現します。
そのネタは、すでにサイトで公開済です。
問題提起
上司から下記の依頼を受けました。
・Excelでデータベースを作成する。
・データベースを作成する際に、商品IDの重複登録をさせない。
Excelで、ACCESSのようなことができるのだろうか?
解決策
・For Each構文を使う・IF構文で条件判定し、重複する場合は登録させないようにする
重複禁止ユーザーフォーム その1 データベース確認
ユーザーフォームの作成方法は、上の記事を参考にしてください。
上の図のD列、商品IDが重複したら、登録をさせないようにします。
重複禁止ユーザーフォーム その2 サイトで検索してみる
重複登録をさせないということは、Excelが、重複があるか、ないかを一旦探します。
重複するものを探して、判定して、登録させないというメッセージを表示させます。
上の図のように、検索ボックスに、【探す】というキーワードを入れます。
そうすると、For Eachが検索でヒットします。
私のサイトに関しては、伊川が本当にわからないときに、Googleで色々調べました。
その時に使ったキーワードで、検索できるように設定をしています。
何気ない言葉で検索すると、みなさんが必要な回答がん見つかるかも知れません。
重複禁止ユーザーフォーム その3 IF構文の条件から抜ける
http://keiyu.xyz/?s=IF%E6%A7%8B%E6%96%87
サイトで検索すると、12件ヒットしました。
その一番初めの記事です。
・もし、重複したら、入力させない⇒IF構文
上の条件を頭の中で整理して、言葉にできるかがポイントです。
上のコードを追加します。
しかし、ただ、コードを付け加えるでは、面白くないので、IF構文で条件分けをします。
Private Sub CommandButton3_Click() Dim i As Long Dim MyR As Range maxrow = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To maxrow For Each MyR In Cells(i, 4) If MyR.Value = TextBox3 Then MsgBox "商品ID重複" Cancel = True Exit Sub Else With Cells(Rows.Count, 1).End(xlUp) .Offset(1, 0) = TextBox1 .Offset(1, 1) = ComboBox1 .Offset(1, 2) = TextBox2 .Offset(1, 3) = TextBox3 .Offset(1, 4) = TextBox4 .Offset(1, 5) = TextBox5 .Offset(1, 6) = TextBox6 .Offset(1, 7) = ComboBox2 .Offset(1, 8) = TextBox7 .Offset(1, 9) = TextBox8 End With End If Next MyR Next i Unload UserForm1 End Sub
ここがポイント
今回は、サイトの情報を使って、Excelで重複登録禁止のユーザーフォームを作成しました。Googleで検索する要領で、このサイトで検索してみてください。きっと、みなさんの欲しい知識のヒントがあるはずです。
まとめ
今回は紹介しませんでしたが、重複しているけど、登録させるという例外もVBAで設定できます。例外のないルールはありません。柔軟な考えでVBAを記載していきましょう。