2017-06-23 5 views
0

@Wolfie Excel Data Checkingによって提出されたコードを使用して、日付と特定のコードが一致する重複エントリにフラグを立てようとしています。私のデータベースでは、日付は列Bにあり、一意のコードは列Lにあり、2文字と2つの数字(すなわちAA22)で構成されていますExcelデータの重複を確認するためのチェック

データベースには列AからQがあります。それが持つ行の数

私は、次のようにコードを修正しようとした -

Dim q As Long 
Dim matched As Boolean 
matched = False 

' Loop over all used rows 
For q = 1 To ActiveSheet.UsedRange.Rows.Count 

    ' Check if concatenated string of date & name is unique 
    ' e.g. '01/01/17john' 
    If ActiveSheet.Cells(q, "B").Text & ActiveSheet.Cells(q, "L").Text = _ 
     myUserForm.DateField.Text & myUserForm.NameField.Text Then 

     MsgBox "This Duty/Date combination has already been entered, please check for previous entry" 

     matched = True 

     Exit For 

    End If 

Next q 

If matched = False Then 

    ' Name/Date combination is unique, send data to sub or whatever... 

End If 

私は私のデータベースがユーザーフォームとして設定されているので、おそらくそれが問題を引き起こしているものかもしれないとは思いませんか?

誰かがそれが何であるかを指摘できれば、私は非常に感謝しています。

誰かが非常に寛大であると感じたら、私にとって素晴らしい1つの調整があります。私は3つのオプションHGWを許可する列(K)を持っています。 RDW & O/T。 HGWまたはRDWが選択されている場合は、重複フラグが表示されている必要があります。ただし、O/Tが選択されている場合は、重複としてフラグを立てません。

希望はこれが理にかなっています!

答えて

0

ユーザーが入力したデータが重複しているかどうかを一致させたい場合は、VBAなしで行うことができます。上記のコードは、データがユーザーフォームを介して入力されたときにこれをチェックするようです。

ユーザーフォームでデータを入力しない場合は、あなただけのようにも、あなたがworksheet_changeを使用することができ、また

=if(isnumber(match(B2&L2,Index($B$1:$B1&$L$1:L1,0),0)),"duplicate","") 

enter image description here

の線に沿っての式でヘルパー列を使用することができます上記と同様のコードを持つイベント。

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim q As Long 
Dim matched As Boolean 
matched = False 

If Not Intersect(Target, Range("L:L")) Is Nothing Then 

' Loop over all used rows 
For q = 1 To ActiveSheet.UsedRange.Rows.Count -1 

    ' Check if concatenated string of date & name is unique 
    ' e.g. '01/01/17john' 
    If ActiveSheet.Cells(q, "B").Value & ActiveSheet.Cells(q, "L").Value = _ 
     Target.Offset(0, -10).Value & Target.Value Then 

     MsgBox "This Duty/Date combination has already been entered, please check for previous entry" 

     matched = True 

     Exit For 

    End If 

Next q 
End If 

If matched = False Then 

    ' Name/Date combination is unique, send data to sub or whatever... 

End If 
End Sub 
+0

ありがとうございました。私はデータベースにVBAコードを追加しましたが、何らかの理由で情報が重複しているというメッセージが表示されていますが、重複が見つかったときだけでなく、すべてのエントリで発生しています。私はそれがどのように行われたのか分かりませんが、あなたが見るためにデータベースをアップロードします! –

+0

数式を調整して、正しい列と行に適用する必要があります。数式が行5で始まる場合は、 'match(B2とL2')は使用できません。また、日付と名前がBとLにない場合は、それも調整する必要があります。 – teylyn

+0

@teylynに戻ってくれてありがとう、私は式のバージョンを試していない、私は余分な列を望んでいなかったので、私はスクリーンショットで見ることができます。データベース(既に非常に広がっています!)重複が見つかったときに代わりにスプラッシュ画面を表示する式を得ることができたら、列を作成して非表示にしてバックグラウンドで動作させることができました。すべてのエントリを重複して強調表示するという問題に直面していたvbaスクリプト!私は3行目以降をチェックするコードが必要で、チェックする行の制限はありません。最終的に新しいentiesが下に追加されます –

関連する問題