Excel VBA ユーザーフォームから重複登録をさせない

B!

目次

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件ヒットしました。

その一番初めの記事です。

重複登録を禁止するには、
・入力しようとするデータが重複しているか探す⇒For Each構文
・もし、重複したら、入力させない⇒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を記載していきましょう。

最新の記事はこちらから