答案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 列中的每个更改都会对数据表进行重新排序。
PS. 最终行的顺序和更改行的所有权是不可预测的...您可以通过设置更详细的排序标准来优化最终顺序。
PPS。当然,您可以不使用条件格式,直接按值排序。因此,请将这篇文章作为示例,而不是解决方案。
答案2
我想建议一套 VBA(宏),将帮助你对行进行排序高的按升序排列,然后填充背景颜色。
排序前:
排序后:
- 按下Alt+F11或者右键点击这工作表标签打开 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
,绿化是可编辑的。
編輯:
此代码将自动对每个新条目的数据集进行排序和组织,并且仅突出显示包含文本的单元格高的。
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() 函数。它工作起来非常简单。对于像我这样的人来说(新手 Excel 用户),VBA 代码非常令人生畏。