2015-11-15 4 views
0

Я изучаю vba.Как выделить все дубликаты в 2 столбцах таблицы? (Vba, excel)

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

Код:

Sub comparisonDuplicateHighlight() 

Set rng = Rows 

Dim activeRow As Integer 
    activeRow = 2 
Dim activeCell1 As Cells 
    activeCell1 = Cells(activeRow, 3) 
Dim activeCell2 As Cells 
    acriveCell2 = Cells(activeRow, 5) 
Dim comparisonRow As Integer 
    comparisonRow = activeRow + 1 
Dim comparisonCell1 As Cells 
    comparisonCell1 = Cells(comparisonRow, 3) 
Dim comparisonCell2 As Cells 
    comparisonCell2 = Cells(comparisonRow, 5) 

    For rng = 2 To 25 

    If comparisonCell1.Value = activeCell1.Value And comparisonCell2.Value = activeCell2.Value Then 
     comparisonCell1.Interior.ColorIndex = 6 
     comparisonCell2.Interior.ColorIndex = 6 

    Else 
     comparisonRow1 = comparisonRow1 + 1 
     comparisonRow2 = comparisonRow2 + 1 

    End If 

End Sub 

Лист: Table

+0

Извините, забыли добавить это: Может ли кто-нибудь сказать мне, что не так с этим кодом? Независимо от того, насколько я пытаюсь улучшить его, я не могу заставить его работать должным образом. – dozzamike

+0

'Для rng = 2 To 25' что это за линия в вашем коде? –

+0

Это не значит, что вы не сравниваете бесконечность объявлений – dozzamike

ответ

0

Что касается последнего вопроса/комментария:

Объявить activeCell1 как переменную типа Range.

Dim activeCell1 As Range 

Тогда SetRange object как,

Set activeCell1 = Cells(activeRow, 3) 

С диапазона вар правильно установить вы можете получить доступ к Range.Value property. Повторите это для всех типов диапазона vars, то вы можете использовать их как:

If comparisonCell1.Value = activeCell1.Value And comparisonCell2.Value = activeCell2.Value Then 
+0

Это все еще не работает. Я смотрел на это часами сейчас ... я что-то упустил? дим activeRow As Integer activeRow = 2 дим activeCell1 В Диапазон Набор activeCell1 = Клетки (activeRow, 3) дим activeCell2 как диапазон Набор activeCell2 = Клетки (activeRow, 5) дим comparisonRow As Integer Набор comparisonRow = activeRow + 1 дим comparisonCell1 как диапазон Набор comparisonCell1 = Клетки (comparisonRow, 3) дим comparisonCell2 как диапазон Набор comparisonCell2 = Клетки (comparisonRow, 5) для activeRow = 2 до 24 – dozzamike

+0

Черт, это не по умолчанию для форматирования кода ... – dozzamike

+0

Вы ** назначаете ** строку numbe rs (Целые числа), например 'сравнениеRow = activeRow + 1', но вы задаете [объекты диапазона] (https://msdn.microsoft.com/en-us/library/office/ff838238.aspx), например' Set compareCell1 = Ячейки (compareRow, 3) '. Две очень разные вещи. – Jeeped

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