[[20111117162309]] 『ユーザーフォーム入力で重複入力を避ける』(マッキー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォーム入力で重複入力を避ける』(マッキー)

 何度もすみません。
 Excel2007です。

 ユーザーフォームの中の「登録」ボタンでユーザーフォームに入力した内容をワークシートに転記させるものを作ったのですが、
 入力した状態で「登録」ボタンをうっかり連打すると何度も同じデータが入力されてしまいます。
 (ユーザーフォームにあるのはテキストボックスだけです)

 重複入力を避ける(例えば2度目以降は確認メッセージ画面を出すとか)方法ってありますか?

 ※補足

 ユーザーフォームにはテキストボックスが3個あります。
 テキストボックス1の内容がワークシートのA列に転記されるようになっており、その内容が
 重複しているかどうかをチェックしてエラーメッセージを出すようなイメージを持っています。
 ネットで探したコードで試している最中ですがうまくいかないので…

 >例えば2度目以降は確認メッセージ画面を出すとか

 それはできるけど、本当に、新規データをいれようとしているのに出すの?
操作者から、ちょっと、うざったいといわれそうだよ。

 それとも、本当に登録ボタンは1回こっきり?
もしそうなら、シートに転記した後に、そのボタンのEnabledをFalseにしてしまうとか、もっと極端に
Visible をFalseにしてしまうとか。

 でも、そうじゃないんだと思うので、これは「正攻法」で、入力しようとしているものと同じ文字列が
シート上の当該領域にあるかどうかをチェックして、あればエラーとするんだろうね。

 (ぶらっと)

 > それはできるけど、本当に、新規データをいれようとしているのに出すの?
 >操作者から、ちょっと、うざったいといわれそうだよ。

 すみません、説明が悪かったです。

 流れとして、

 一つ目の商品の内容を入力
 →登録ボタンで転記

 2個以上同時登録する時
 →「クリア」ボタンで内容をクリア
 →二つ目の商品の内容を入力
 →登録ボタンで次の行に転記

 なんですが、例えば一つ目の商品を登録しようとして「登録」ボタンを押した時、うっかり2回とか3回とか
 押してしまうと同じデータが何行もできてしまうので、そこでメッセージボックスを出すとかして重複データの
 チェックをしたいんです。

 あるいは「登録」ボタンを押してワークシートに転記するのと同時にフォームの内容をクリアするようなものでも構いません。

 今は下記のようなコードです

 Private Sub HinTouroku_Click()

    Dim lRow As Long

    With Worksheets("商品マスタ")
       lRow = .Range("A" & Rows.Count).End(xlUp).Row + 1

        Worksheets("商品マスタ").Cells(lRow, "a").Value = HinId.Text
        Worksheets("商品マスタ").Cells(lRow, "b").Value = Syubetu.Text
        Worksheets("商品マスタ").Cells(lRow, "c").Value = Hinmei.Text

    End With

 End Sub

 ※ HinID = 商品ID、Syubetu = 種別、Hinmei = 商品名

 >入力しようとしているものと同じ文字列が
シート上の当該領域にあるかどうかをチェックして、あればエラーとするんだろうね。

 はい、そんな感じです。

 (マッキー)

 たとえば、こんなの。

Private Sub HinTouroku_Click()

    Dim lRow As Long
    Dim s1 As String, s2 As String

    With Worksheets("商品マスタ")
        lRow = .Range("A" & Rows.Count).End(xlUp).Row
        s1 = .Cells(lRow, "A").Value & vbTab & .Cells(lRow, "B").Value & vbTab & .Cells(lRow, "C").Value
        s2 = HinID.Text & vbTab & Syubetu.Text & vbTab & Hinmei.Text
        If s1 = s2 Then
            MsgBox "直前に入力したものと同じです"
            Exit Sub
        End If
        lRow = lRow + 1

        .Cells(lRow, "a").Value = HinID.Text
        .Cells(lRow, "b").Value = Syubetu.Text
        .Cells(lRow, "c").Value = Hinmei.Text
    End With

 End Sub

 (ぶらっと)

 >あるいは「登録」ボタンを押してワークシートに転記するのと同時にフォームの内容をクリアするようなものでも構いません。

 一般的には、これなんじゃないですか?

 ユーザーフォームの入力コントロールのクリアは、For文を使えばできるはずですよ!!

 品名データの1行目の品名に何も入力されていなければ、転記処理には
 行かないような仕様になっていますよね!!

 よく検討して下さい

 ichinose


ぶらっと様ありがとうございます!!

教えていただいたコードを少しいじって商品のID(A列)に同じものがあればメッセージを出すようにしました。

本当に助かりました!

(マッキー)


ichinose様

昨日に引き続きご教授ありがとうございます。

重複チェックはそれはそれで必要だったので、ぶらっと様に教えていただいたコードを元にFor文でクリアできるように今から試してみます

 (マッキー)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.