Переменные группы раскраски строк в Excel
У меня есть таблица Excel вроде этого
id | data for id
| more data for id
id | data for id
id | data for id
| more data for id
| even more data for id
id | data for id
| more data for id
id | data for id
id | data for id
| more data for id
Теперь я хочу сгруппировать данные одного идентификатора, чередуя цвет фона строк
var color = white
for each row
if the first cell is not empty and color is white
set color to green
if the first cell is not empty and color is green
set color to white
set background of row to color
Может ли кто-нибудь помочь мне с макросом или кодом VBA
Спасибо
Ответы
Ответ 1
Я думаю, что это делает то, что вы ищете. Отбрасывает цвет, когда ячейка в столбце A изменяет значение. Выполняется до тех пор, пока в столбце B не будет значения.
Public Sub HighLightRows()
Dim i As Integer
i = 1
Dim c As Integer
c = 3 'red
Do While (Cells(i, 2) <> "")
If (Cells(i, 1) <> "") Then 'check for new ID
If c = 3 Then
c = 4 'green
Else
c = 3 'red
End If
End If
Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c
i = i + 1
Loop
End Sub
Ответ 2
Я использую эту формулу, чтобы получить вход для условного форматирования:
=IF(B2=B1,E1,1-E1)) [content of cell E2]
Если столбец B содержит элемент, который необходимо сгруппировать, а E - вспомогательный столбец. Каждый раз, когда верхняя ячейка (B1 в этом случае) совпадает с текущей (B2), возвращается верхнее содержимое строки из столбца E. В противном случае он вернет 1 минус это содержимое (то есть, outupt будет 0 или 1, в зависимости от значения верхней ячейки).
![enter image description here]()
![enter image description here]()
![enter image description here]()
Ответ 3
Вам нужно использовать код?
если таблица статична, то почему бы не использовать функцию автоматического форматирования?
![enter image description here]()
Это может также помочь, если вы "объедините ячейки" из тех же данных. так что, возможно, если вы объедините ячейки "данных, больше данных и еще больше данных" в одну ячейку, вы можете более легко справиться с классическим случаем "каждая строка является строкой".
Ответ 4
На основании ответа Jason Z, который из моих тестов кажется неправильным (по крайней мере, в Excel 2010), здесь немного кода, который работает для меня:
Public Sub HighLightRows()
Dim i As Integer
i = 2 'start at 2, cause there nothing to compare the first row with
Dim c As Integer
c = 2 'Color 1. Check http://dmcritchie.mvps.org/excel/colors.htm for color indexes
Do While (Cells(i, 1) <> "")
If (Cells(i, 1) <> Cells(i - 1, 1)) Then 'check for different value in cell A (index=1)
If c = 2 Then
c = 34 'color 2
Else
c = 2 'color 1
End If
End If
Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c
i = i + 1
Loop
End Sub
Ответ 5
Я делаю это и пытаюсь изменить его для моего использования. У меня есть порядковые номера в столбце a, а некоторые заказы занимают несколько строк. Просто хочу чередовать белый и серый номер заказа. То, что у меня здесь, чередует каждую строку.
ChangeBackgroundColor()
' ChangeBackgroundColor Macro
'
' Keyboard Shortcut: Ctrl+Shift+B
Dim a As Integer
a = 1
Dim c As Integer
c = 15 'gray
Do While (Cells(a, 2) <> "")
If (Cells(a, 1) <> "") Then 'check for new ID
If c = 15 Then
c = 2 'white
Else
c = 15 'gray
End If
End If
Rows(Trim(Str(a)) + ":" + Trim(Str(a))).Interior.ColorIndex = c
a = a + 1
Loop
End Sub
Ответ 6
Если вы выберете опцию "Условное форматирование" в пункте "Формат", вам будет предоставлено диалоговое окно, позволяющее создать некоторую логику для применения к этой ячейке.
Ваша логика может быть не такой, как ваш код выше, это может выглядеть по-другому:
Значение ячейки | равный | | и | Белый.... Затем выберите цвет.
Вы можете выбрать кнопку добавления и сделать условие настолько большим, насколько вам нужно.
Ответ 7
Я переработал ответ Бартдуда для Light Grey/White на основе настраиваемого столбца, используя значения RGB. Булева переменная перевернута, когда значение изменяется, и это используется для индексации массива цветов с помощью целых значений True и False. Работает для меня в 2010 году. Назовите sub с номером листа.
Public Sub HighLightRows(intSheet As Integer)
Dim intRow As Integer: intRow = 2 ' start at 2, cause there nothing to compare the first row with
Dim intCol As Integer: intCol = 1 ' define the column with changing values
Dim Colr1 As Boolean: Colr1 = True ' Will flip True/False; adding 2 gives 1 or 2
Dim lngColors(2 + True To 2 + False) As Long ' Indexes : 1 and 2
' True = -1, array index 1. False = 0, array index 2.
lngColors(2 + False) = RGB(235, 235, 235) ' lngColors(2) = light grey
lngColors(2 + True) = RGB(255, 255, 255) ' lngColors(1) = white
Do While (Sheets(intSheet).Cells(intRow, 1) <> "")
'check for different value in intCol, flip the boolean if it different
If (Sheets(intSheet).Cells(intRow, intCol) <> Sheets(intSheet).Cells(intRow - 1, intCol)) Then Colr1 = Not Colr1
Sheets(intSheet).Rows(intRow).Interior.Color = lngColors(2 + Colr1) ' one colour or the other
' Optional : retain borders (these no longer show through when interior colour is changed) by specifically setting them
With Sheets(intSheet).Rows(intRow).Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(220, 220, 220)
End With
intRow = intRow + 1
Loop
End Sub
Дополнительный бонус: для данных SQL, цвет любого значения NULL с тем же желтым, что и в SSMS
Public Sub HighLightNULLs(intSheet As Integer)
Dim intRow As Integer: intRow = 2 ' start at 2 to avoid the headings
Dim intCol As Integer
Dim lngColor As Long: lngColor = RGB(255, 255, 225) ' pale yellow
For intRow = intRow To Sheets(intSheet).UsedRange.Rows.Count
For intCol = 1 To Sheets(intSheet).UsedRange.Columns.Count
If Sheets(intSheet).Cells(intRow, intCol) = "NULL" Then Sheets(intSheet).Cells(intRow, intCol).Interior.Color = lngColor
Next intCol
Next intRow
End Sub
Ответ 8
Я использую это правило в Excel для форматирования чередующихся строк:
- Выделите строки, в которые вы хотите применить альтернативный стиль.
- Нажмите "Условное форматирование" → Новое правило
- Выберите "Использовать формулу для определения, какие ячейки нужно форматировать" (последняя запись)
- Введите правило в формате:
=MOD(ROW(),2)=0
- Нажмите "Формат", сделайте необходимое форматирование для чередующихся строк, например. Заполнить → Цвет.
- Нажмите OK, нажмите OK.
Если вы хотите форматировать альтернативные столбцы, используйте =MOD(COLUMN(),2)=0
Voila!