[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォーム入力で重複入力を避ける』(マッキー)
何度もすみません。 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列)に同じものがあればメッセージを出すようにしました。
本当に助かりました!
(マッキー)
昨日に引き続きご教授ありがとうございます。
重複チェックはそれはそれで必要だったので、ぶらっと様に教えていただいたコードを元にFor文でクリアできるように今から試してみます
(マッキー)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.