Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Чередование групп окраски строк в 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
Спасибо
Я использую эту формулу для получения входных данных для условного форматирования:
=IF(B2=B1,E1,1-E1)) [content of cell E2]
Где столбец B содержит элемент, который необходимо сгруппировать, а E-вспомогательный столбец. Каждый раз, когда верхняя ячейка (B1 в данном случае) совпадает с текущей (B2), возвращается содержимое верхней строки из столбца E. В противном случае он вернет 1 минус это содержимое (то есть outupt будет равен 0 или 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
Основываясь на ответе Джейсона Z, который из моих тестов кажется неправильным (по крайней мере, на Excel 2010), вот немного кода, который работает для меня :
Public Sub HighLightRows()
Dim i As Integer
i = 2 'start at 2, cause there's 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
Вам обязательно использовать код? если таблица статична, то почему бы не использовать функцию автоматического форматирования?
Это также может помочь, если вы "merge cells" из тех же данных. поэтому, возможно, если вы объедините ячейки "data, more data, even more data" в одну ячейку, вам будет легче иметь дело с классическим случаем "each row is a row".
Я тащу это и пытаюсь изменить его для своего использования. У меня есть номера заказов в столбце А, и некоторые заказы занимают несколько строк. Просто нужно чередовать белый и серый цвета для каждого номера заказа. То, что у меня здесь есть, чередует каждый ряд.
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
Если вы выберете пункт меню Условное форматирование под пунктом меню Формат, вам будет предоставлено диалоговое окно, которое позволяет построить некоторую логику для применения к этой ячейке.
Ваша логика может не совпадать с вашим кодом выше, он может выглядеть более похожим:
Значение ячейки | равно | / и / White .... Затем выберите цвет.
Вы можете выбрать кнопку Добавить и сделать условие таким большим, как вам нужно.
Я переработал ответ Bartdude для светло-серого / белого цвета на основе настраиваемого столбца, используя значения RGB. Логический var переворачивается при изменении значения, и это используется для индексации массива цветов через целочисленные значения True и False. Работает на меня с 2010 года. Вызовите субмарину с номером листа.
Public Sub HighLightRows(intSheet As Integer)
Dim intRow As Integer: intRow = 2 ' start at 2, cause there's 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's 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
Я использую это правило в Excel для форматирования чередующихся строк:
- Выделите строки, к которым вы хотите применить переменный стиль.
- Нажмите "Conditional Formatting" -> Новое Правило
- Выберите "Use a formula to determine which cells to format" (последняя запись)
- Введите правило в значение формата:
=MOD(ROW(),2)=0 - Нажмите "Format", сделайте необходимое форматирование для чередующихся строк, например. цвет заливки.
- Нажмите OK, Нажмите OK.
Если вы хотите отформатировать чередующиеся столбцы вместо этого, используйте =MOD(COLUMN(),2)=0
Вуаля!