Выбор двух столбцов на основе активной ячейки?

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

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

Sub findDups()
'
' findDups Macro

    ActiveCell.EntireColumn.Select

    Selection.FormatConditions.AddUniqueValues
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).DupeUnique = xlDuplicate
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Range("M1").Select

    Worksheets("User Check List").Activate
    Selection.Offset(0, 2).Select
End Sub

person Batman    schedule 20.06.2013    source источник
comment
ActiveCell.Resize(1, 2).EntireColumn.Select, но лучший метод не будет включать использование ActiveCell или Selection методов, за исключением, возможно, начального ввода.   -  person David Zemens    schedule 21.06.2013


Ответы (1)


Это должно сработать, чтобы вы начали. Я вообще избегаю использования Selection и использую ActiveCell только как средство узнать, где запустить макрос. Желательно, чтобы вы могли сделать это с помощью Application.InputBox, но это не имеет большого значения.

Поскольку я не знаю, сколько раз вы хотите, чтобы это выполнялось в цикле, я использовал оператор Do ... Loop, и это будет продолжаться до тех пор, пока номер столбца не будет> 26. Вы можете изменить это в операторе Loop Until ....

Sub findDups()
Dim startCell As Range
Dim formatCols As Range

Set startCell = ActiveCell

Do
    Set formatCols = startCell.Resize(1, 2).EntireColumn

    formatCols.FormatConditions.AddUniqueValues
    formatCols.FormatConditions(formatCols.FormatConditions.Count).SetFirstPriority
    formatCols.FormatConditions(1).DupeUnique = xlDuplicate
    With formatCols.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With formatCols.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With

    Set startCell = startCell.Offset(0, 2)

Loop Until startCell.Column >= 26

End Sub

Вот пример форматирования вывода:

введите описание изображения здесь

person David Zemens    schedule 20.06.2013
comment
Это именно то, что я хочу. Спасибо. У меня около 400 столбцов (200 пар). Есть ли способ немного изменить формулу для применения, если в ячейках есть содержимое, вместо изменения 26 на 400? Списки начинаются со строки 2, а строка 1 имеет заголовки, возможно, что-то вроде того, что если строка 1 имеет заголовок, запускает эту функцию: / - person Batman; 21.06.2013
comment
Предполагая, что лист содержит только эти столбцы данных, независимо от того, сколько столбцов их может быть, вы можете сделать что-то вроде Loop Until startCell.Column > ActiveSheet.UsedRange.Columns.Count. Это все еще можно сделать, если ваш лист также содержит другие данные, но в этом случае мне нужно было бы больше узнать о макете листа, чтобы программно получить последний столбец, к которому это должно применяться. - person David Zemens; 21.06.2013
comment
Я попробую это. На листе больше ничего нет. Похоже на то, что у вас есть, но с заголовками в строке 1. - person Batman; 21.06.2013
comment
Эй, мне было интересно, есть ли способ ограничить количество строк, к которым это применяется, в зависимости от наличия содержимого в ячейках. Я чувствую, что это применяется ко всему столбцу, и это действительно замедляет работу листа. Может, вместо всего столбца, как первые 100 ячеек? - person Batman; 25.06.2013
comment
Кроме того, всякий раз, когда я ввожу данные в ячейку, лист зависает на достаточно долгое время. - person Batman; 26.06.2013
comment
Попробуйте изменить значение на set formatcols = startcell.resize(100, 2), это будет делать только первые 100 строк. Это должно значительно ускорить его. - person David Zemens; 26.06.2013