Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# test if values are unique vba

Posted on 2010-08-13
Medium Priority
372 Views
hy ,
how to test if values in 4 cells are unique

A      B      C      D
1     4      9       7      5

something like :
if A1 <>B1<>C1<>D1 then
0
Question by:thmh
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 4
• 2
• 2
• +1

LVL 93

Accepted Solution

Patrick Matthews earned 400 total points
ID: 33431903
I would loop through and use CountIf:
``````Dim rng As Range, cel As Range
Dim Counter As Long

Set rng = ActiveSheet.Range("a1:d1")
For Each cel In rng.Cells
Counter = Counter + Application.CountIf(rng, cel.Value)
Next
If Counter > 4 Then
'duplicates
Else
'no duplicates
End If
``````
0

LVL 45

Expert Comment

ID: 33432029
thmh,

The code below is in the attached file. Try changing one of the numbers so that it is the same as another.

Hope it helps

Patrick
``````Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim celle As Range
Dim coll As New Collection

With Sheets("Sheet1")
Set rng = Range(.Cells(1, "A"), .Cells(1, "D"))
End With
If Not Intersect(rng, Target) Is Nothing Then
For Each celle In rng
On Error Resume Next
If Err <> 0 Then
MsgBox "One or more are the same"
Exit Sub
End If
Next celle
End If

End Sub
``````
thmh-04.xls
0

Author Comment

ID: 33432054
what if cells are in different locations

A      BD      CP      DJ
1     4
2               9
3                         3
5                                    7
0

LVL 45

Expert Comment

ID: 33432070
If you want just a formula, perhaps this will do it:

=IF(OR(COUNTIF(A1:D1,A1)<>1,COUNTIF(A1:D1,B1)<>1,COUNTIF(A1:D1,C1)<>1,COUNTIF(A1:D1,D1)<>1),"Duplicates present","No duplicates")

Patrick(ab)
0

LVL 81

Expert Comment

ID: 33432078
You could use an array-entered formula like:
=SUM(IFERROR(1/COUNTIF(A1:D1,A1:D1),0))=COUNTA(A1:D1)                  returns either TRUE or FALSE; requires Excel 2007 or later
=SUM(IF(ISERROR(1/COUNTIF(A1:D1,A1:D1)),0,1/COUNTIF(A1:D1,A1:D1)))=COUNTA(A1:D1)                  works in any version of Excel

To array-enter a formula:
1) Click in the formula bar
2) Hold the Control and Shift keys down
3) Hit Enter
4) Release all three keys

Excel should respond by adding curly braces { } surrounding the formula. If not, repeat steps 1 through 4.

If you prefer a user-defined function, I posted one in the snippet.
``````Function NoDupes(Values As Variant) As Boolean
Dim v As Variant
Dim coll As New Collection
On Error Resume Next
For Each v In Values
If v <> "" Then coll.Add CStr(v), CStr(v)
Next
NoDupes = Err = 0
On Error GoTo 0
End Function
``````
0

LVL 81

Assisted Solution

byundt earned 160 total points
ID: 33432115
The NoDupes user-defined function will work with non-contiguous cells if you use the Union operator (surrounding the list of cells by parentheses). These cells must all be on the same worksheet.
=NoDupes((A1,B2,C3,D4))
0

LVL 45

Assisted Solution

patrickab earned 160 total points
ID: 33432171
>what if cells are in different locations

A      BD      CP      DJ
1     4
2               9
3                         3
5                                    7

Change the macro to that shown below.

Patrick(ab)
``````Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim celle As Range
Dim coll As New Collection

With Sheets("Sheet1")
Set rng = .Range("A1,BD2,CP3,DJ5")
End With
If Not Intersect(rng, Target) Is Nothing Then
For Each celle In rng
On Error Resume Next
If Err <> 0 Then
MsgBox "One or more are the same"
Exit Sub
End If
Next celle
End If

End Sub
``````
0

Author Comment

ID: 33432345
tnx all
matthewspatrick solutions is best for what i need
0

LVL 45

Expert Comment

ID: 33432573
thmh - Tks4pts - Patrick(ab)
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article descibes how to create a connection between Excel and SAP and how to move data from Excel to SAP or the other way around.
Access developers frequently have requirements to interact with Excel (import from or output to) in their applications.  You might be able to accomplish this with the TransferSpreadsheet and OutputTo methods, but in this series of articles I will diâ€¦
This Micro Tutorial will demonstrate the scrolling table in Microsoft Excel using the INDEX function.
This Micro Tutorial will demonstrate how to create pivot charts out of a data set. I also added a drop-down menu which allows to choose from different categories in the data set and the chart will automatically update.
###### Suggested Courses
Course of the Month10 days, 4 hours left to enroll