2016-11-11 20 views
0

У меня есть список адресов и частей адресов для некоторых записей, которые были дублированы. например некоторые записи содержат «Лондон» как в столбце D, так и в столбце E.Найти повторяющиеся значения в одной строке (Excel)

Я хочу найти и выделить любые повторяющиеся значения по всем столбцам, но в пределах одной строки.

До сих пор я написал код ниже, но я хочу, чтобы он работал через каждый столбец, содержащий значения, а не только два столбца, которые я назвал.

Dim Lastrow As Long 
Dim i As Long 
Lastrow = Range("D" & Rows.Count).End(xlUp).Row 
For i = 2 To Lastrow 
    If Range("D" & i).Value = Range("E" & i).Value Then 
     Range("E" & i).Interior.ColorIndex = 6 
    End If 
Next i 

Я пытался найти ответ, но я только смог найти способы выделения целых повторяющихся строк или повторяющихся значений в разных столбцах и строках.

Благодарим вас за то, что нашли время, чтобы прочитать это и за любую помощь, которую вы можете дать.

+1

Вы можете сделать это с помощью условного форматирования, нет необходимости в VBA. – SJR

+0

@SJR Спасибо SJR, но если я неправильно использую условное форматирование, он также выделяет разные строки, которые имеют соответствующее значение. Так, например, выделены десять строк адресов с одним и тем же городом, а не только строки, которые имеют дублирование в каждой строке. – GreySaxon

+0

Предположим, что ваши данные находятся в диапазоне от A1 до B10. Выделите свой диапазон так, чтобы A1 был активной ячейкой (выделен). Затем перейдите к CF, добавьте формулу = COUNTIF ($ A1: $ A10, A1)> 1 и выберите свое форматирование. Я думаю, это должно делать то, что вы хотите. – SJR

ответ

1

Если вы действительно хотите VBA Решение это делает трюк:

Sub JustCall() 
Call DuplicatedInRangeByRow(Range("A1:D5")) 
End Sub 
Sub DuplicatedInRangeByRow(RangeToLook As Range) 
Const ColorHighlight = vbYellow 
Dim ItemRange As Range 
Dim TotalRows As Long: TotalRows = IIf(RangeToLook.Row > 1, RangeToLook.Rows.Count + RangeToLook.Row - 1, RangeToLook.Rows.Count) 
Dim TotalCols As Long: TotalCols = IIf(RangeToLook.Column > 1, RangeToLook.Columns.Count + RangeToLook.Column - 1, RangeToLook.Columns.Count) 
Dim CounterCols As Long 
Dim CounterRows As Long 
Dim StartCol As Long 
Dim SheetForRange As Worksheet: Set SheetForRange = RangeToLook.Parent 
    For CounterRows = RangeToLook.Row To TotalRows 
    For CounterCols = RangeToLook.Column To TotalCols 
    StartCol = IIf(StartCol = 0, CounterCols, StartCol) 
    With SheetForRange 
    If CStr(.Cells(CounterRows, StartCol).Value) = CStr(.Cells(CounterRows, CounterCols).Value) And StartCol <> CounterCols Then .Cells(CounterRows, StartCol).Interior.Color = ColorHighlight: .Cells(CounterRows, CounterCols).Interior.Color = ColorHighlight 
    End With 
    Next CounterCols 
    StartCol = 0 
    Application.StatusBar = "Progress: " & CounterRows & " out of " & TotalRows & " Rows analyzed " & Format(CounterRows/TotalRows, "Percent") 
    Next CounterRows 
End Sub 

enter image description here

+1

Это сложно чтобы понять, чего хочет OP. Я читал его как любой дубликат в строке, а не только в том случае, если первый столбец дублируется. То, как я это понял, если вы положите «Cat» в D5, он выделит «Parrot» и «Cat». Но я могу ошибаться. –

+0

@ScottCraner Любое из решений - мое или мое - должно решить, по крайней мере, ха-ха. – Sgdva

+1

Я надеялся на решение VBA, и это прекрасно решает мою проблему! Спасибо @ Сгдва – GreySaxon

1

для условного форматирования вы бы использовать следующую формулу:

=COUNTIF($A1:$J1,A1)>1 

Где $A1 и A1 относится к самой верхней левой ячейки в диапазоне, к которому форматирование применяется. И $J1 - верхняя правая ячейка диапазона.

Обратите особое внимание на то, что является абсолютным и что относительно.

enter image description here

Смежные вопросы