目次
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を記載していきましょう。


