У меня есть несколько колонок, среди которых наиболее важными являются:Задания,Приоритет,Положение дел.
Мне нужны все строки записей, гдеприоритетговорит "Высокий" автоматически обновляться и появляться поверх других записей.
Мои познания в VB ограничиваются открытием редактора VB. Помогите, пожалуйста.
РЕДАКТИРОВАТЬ
Вот скриншот того, что я пытаюсь сделать. Я уже установил условное форматирование, чтобы выделить все строки, гдеприоритетпоказывает каквысокий. Теперь мне нужно, чтобы все эти записи (и новые записи с «высоким» приоритетом при каждом добавлении) автоматически появлялись поверх других записей.
решение1
Включить автофильтрацию таблиц.
Установите условное форматирование для столбца «Статус», отметьте высокие значения приятным фоновым цветом.
Вставьте код ниже в модуль рабочего листа. Измените номер столбца, адрес ячейки заголовка и значение фонового цвета в коде по мере необходимости.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then With AutoFilter.Sort .SortFields.Clear .SortFields.Add(Range("B1"), xlSortOnCellColor, xlAscending, , xlSortTextAsNumbers).SortOnValue.Color = RGB(242, 242, 242) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End If End Sub
Теперь каждое изменение в столбце B будет изменять порядок данных в вашей таблице.
P.S. Окончательный порядок строк и принадлежность измененной строки непредсказуемы... Вы можете уточнить окончательный порядок, задав более подробные критерии сортировки.
PPS. Конечно, можно не использовать условное форматирование и сортировать по значению напрямую. Так что используйте этот пост как пример, а не решение.
решение2
Я хотел бы предложить набор VBA (Макрос), который поможет вам сортировать строки.Высокийв порядке возрастания, а затем залейте фоновым цветом.
Перед сортировкой:
После сортировки:
- Либо нажмитеАльт+Ф11илиЩелкните правой кнопкой мыши the Вкладка листачтобы открыть редактор VB.
Скопируйте и вставьте этот код VBA как стандартный модуль.
Sub SortDataWithoutHeader() Range("Test12A.xlsm!Newdata1").Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlYes Call Highlight End Sub
Sub Highlight()
Dim LastRow As Long, c As Range
Dim MyRange As Range
LastRow = Cells(Cells.Rows.Count, "C").End(xlUp).Row
Set MyRange = Range("C2:C" & LastRow)
For Each c In MyRange
If c.Value = "High" Then
c.EntireRow.Interior.Color = vbGreen
Else
c.EntireRow.Interior.Color = xlNone
End If
Next
End Sub
Примечание.
- В этой строке,
Range("Test12A.xlsm!Newdata1")
,Новые данные1этоИменованный диапазон, избежит редактированияДиапазон сортировкикаждый раз будет вводиться новая строка. Interior.Color = vbGreen
,vbGreenможно редактировать.
Отредактировано:
Этот код автоматически сортирует и организует набор данных при каждой новой записи и выделяет только те ячейки, в которых есть текст.Высокий.
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("C:C")) Is Nothing Then
Range("C1").Sort Key1:=Range("C2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Call Highlight
Application.EnableEvents = False
End If
End Sub
Sub Highlight()
Dim cell As Range
For Each cell In Range("C:C")
If cell.Value = "High" Then
cell.Interior.Color = XlRgbColor.rgbLightGreen
Else
cell.Interior.Color = xlNone
End If
Next cell
End Sub
При необходимости отрегулируйте ссылки на ячейки в коде VBA.
решение3
Попробуйте использовать функцию Sortby(). Это сработало так легко. Код VBA для кого-то вроде меня (новичка в Excel) был очень сложным.