Версия для печати

Разделение строк с разным содержимым «зеброй»

Что умеет Excel

 

Допустим у Вас есть бо-о-ольшая таблица с данными. В одном столбце таблицы находятся данные по артикулам. В остальных имеется остальные данные по ним — операции, дата/время, сумма товара и т.д. Просматривать такую таблицу глазами неудобно: каждый раз приходится сверяться — а в той ли строке я смотрю? Да и разбить данные на отдельные блоки по идентичным артикулам не мешало бы. Но как? Как разбить не подскажу, а вот раскрасить можно. Один артикул в один цвет, другой в другой. И так по очереди — то один, то другой. Зебра, одним словом. Чтоб было понятней см. рис.1.

Пример таблицырис.1

Для этого надо всего лишь создать стандартный модуль и вставить в него следующий код:

Sub Zebra()
    Dim li As Long, lColor As Long, lColNum As Long, lColEND As Long
    lColor = xlNone
    On Error Resume Next
    lColNum = InputBox("Укажите номер столбца со значениями", "Окно ввода параметра", 1)
    If lColNum = 0 Then Exit Sub
    If Not IsNumeric(lColNum) Then Exit Sub
    On Error GoTo 0
    lColEND = Cells(1, Columns.Count).End(xlToLeft).Column
    Application.ScreenUpdating = False
    For li = 2 To Cells(Rows.Count, lColNum).End(xlUp).Row
        If Cells(li, lColNum) <> Cells(li - 1, lColNum) Then
            If lColor = xlNone Then lColor = vbGreen Else lColor = xlNone
        End If
        Range(Cells(li, 1), Cells(li, lColEND)).Interior.Color = lColor
    Next li
    Application.ScreenUpdating = True
End Sub
Sub Zebra()
    Dim li As Long, lColor As Long, lColNum As Long, lColEND As Long
    lColor = xlNone
    On Error Resume Next
    lColNum = InputBox("Укажите номер столбца со значениями", "Окно ввода параметра", 1)
    If lColNum = 0 Then Exit Sub
    If Not IsNumeric(lColNum) Then Exit Sub
    On Error GoTo 0
    lColEND = Cells(1, Columns.Count).End(xlToLeft).Column
    Application.ScreenUpdating = False
    For li = 2 To Cells(Rows.Count, lColNum).End(xlUp).Row
        If Cells(li, lColNum) <> Cells(li - 1, lColNum) Then
            If lColor = xlNone Then lColor = vbGreen Else lColor = xlNone
        End If
        Range(Cells(li, 1), Cells(li, lColEND)).Interior.Color = lColor
    Next li
    Application.ScreenUpdating = True
End Sub

После вставки просто нажмите Alt+F8 и выполните макрос Zebra.

Скачать пример »

  Tips_Macro_Zebra.xls (37,0 KiB, 1 030 скачиваний)

Так же см.:
Выделение строк цветом через одну
Координатное выделение строки и столбца



Поддержать автора сайта
Поделиться ссылкой
  1. Юрий
    16 Сентябрь 2011 в 09:53 | #1

    Добрый день. Полезный макрос. Но он правильно работает есль диапазон данных начинается с первой строки первого столбца. А если, к примеру, с 3-ей, с 5-ой ……. Интересно как выглядел бы скрипт если бы «зебре» «скармливать» выделенный диапазон?

    • 17 Сентябрь 2011 в 10:54 | #2

      В этой строке
      For li = 2 To Cells(Rows.Count, lColNum).End(xlUp).Row
      меняете 2 на нужный номер строки.

      Для выделенного диапазона:
      For li = Selection.row To Selection.Rows.Count

  2. Юрий
    20 Сентябрь 2011 в 14:52 | #3

    А еще надо в скрипте менять?

  3. Юрий
    20 Сентябрь 2011 в 14:52 | #4

    В смысле кроме этого, надо ли что-то еще менять?

  4. 20 Сентябрь 2011 в 16:48 | #5

    Нет. А вообще для того, чтобы понять нужно ли что-то еще менять, можно просто заменить указанное, попробовать запустить код и посмотреть результат.

Комментарий будет добавлен после проверки администратором.
Комментарии, не имеющие отношения к комментируемой статье, будут удаляться без уведомления и объяснения причин. Если есть вопрос по проблеме в Excel- добро пожаловаться на Форум