[[20060906164844]] 『識別コードの重複登録を無くす方法について』(yu_mama) ページの最後に飛ぶ

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

 

『識別コードの重複登録を無くす方法について』(yu_mama)
 A列:識別コード,B列:品番、C列:個数の登録がされているシートがあります。
品番が増えるたびにシートに追加していきます。A列には識別コードをユニークに
付けなければなりません。これまでに入力されている識別コードと重複しないために
重複した番号を入力した場合エラーの出る方法を教えて頂けませんでしょうか。

 また、識別コードは半角英数字のみの使用ととなります。全角、ひらがな、カタカナ
が入力された場合もエラーになる方法を教えて頂けないでしょうか。桁数の規制はありません。

 入力例
 A     B     C
識別コード  品番    個数
A1   23174-7732   3
A55   AABIS-10    2
BN1   22-391     220
CR1   A0928       1


 入力規則を利用されてはいかがでしょうか?
 A列を選択し、A1がアクティブなことを確認して、データ-->入力規則を選択。
 設定タブの入力値の種類をユーザー設定にして、数式 =COUNTIF(A:A,A1)=1 と入力する。
 日本語入力タブを選択し、日本語入力を「オフ」にする。
 以上でいかがでしょうか?
 (ROUGE)

 早速ためさせて頂きました。ありがとうございます。まず、入力規則でCOUNTIFを使った場合ですが、
手入力で重複のコードを入力した場合は、エラーとなるのですが、他のセルから重複のコードを値複写で
貼り付けた場合はエラーとならないため、重複のコードが存在してしまいます。
この状況を回避する方法は無いのでしょうか。

 次の「日本語入力タブを選択し、日本語入力を「オフ」にする。」とアドバイス頂きましたが、
方法が良く理解できずに試すことが出来ませんでした。入力規則で設定するのでしょうか?
申し訳ありませんが方法を教えて頂けますでしょうか?よろしくお願いします。


 コピペで入力されたらいずれにしても入力規則からの対応は難しそうですね。
 VBA処理にしました。
 シートタブを右クリックし、コードの表示を選択。
 出てきた画面の白い部分に下記のコードを貼り付けて閉じる。
 これでどうでしょう。
 (ROUGE)
'----
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, j As Long
    With Target
        For i = .Count To 1 Step -1
            With .Cells(i)
                If .Column = 1 Then
                    If WorksheetFunction.CountIf(Range("A:A"), .Value) > 1 Then
                        Application.EnableEvents = False
                        MsgBox "識別コードが重複しています。", vbExclamation, "重複エラー"
                        .Value = Empty
                        Application.EnableEvents = True
                    End If
                    For j = 1 To Len(.Text)
                        Select Case Asc(Mid(.Text, j))
                            Case 65 To 90, 97 To 122, 48 To 57
                            Case Else
                                MsgBox "不正な文字が入力されています。", vbExclamation, "入力エラー"
                                Application.EnableEvents = False
                                .Value = Empty
                                Application.EnableEvents = True
                                Exit For
                        End Select
                    Next
                End If
            End With
        Next
    End With
End Sub

 アドバイス頂きましてありがとうございました。
試してみましたところA列での入力は成功しました。この規制を他の列でも掛けたい場合は何処を変更すれば良いのでしょうか。
Range("A:A")のAを(B:B)に変更してみましたが旨く行きませんでした。
 また、不正な文字の確認をD列で行い、重複コードの確認をC列で行いたい場合の方法も
ご教授頂けると助かります。よろしくお願いします。(yu_mama)

 前半部分への回答
 6行目の「.Column = 1」を希望の列番号に変更(B列ならば2)し、
 Range("A:A")をColumns(.Column)に変更。

 後半部分
 D列とC列でチェックする内容が違うということですか?
 If .Column=3 Then...というようにして、処理を書いてあげればよいと思います。

 いずれにしても、前半と後半のやりたいことがコンタミしているので、実際にやりたいことを
 整理された方がよいかと思います。
 (ROUGE)

 回答頂きましてありがとうございました。
エラー表示も思った通りに表示されて、間違いも少なくなりそうです。
また、前半と後半の内容をを分離して試して見たいと思います。(yu_mama)

コメント返信:

[ 一覧(最新更新順) ]


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