目次
ACCESSの主キーのように重複登録させない
こんにちは。伊川(@naonaoke)です。
重複登録をさせないようにすることを、Excelのユーザーフォームで作成します。
上の記事は、ACCESSですが、Excelで再現します。
そのネタは、すでにサイトで公開済です。
問題提起
(株)IKAWAの柄久 瀬瑠子(エク セルコ)は
上司から下記の依頼を受けました。
・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を記載していきましょう。