編輯:

編輯:

我有几列,其中重要的是:任务优先事项地位

我想要所有记录行优先事项说“高的“自动更新并出现在其他记录的顶部。

我对 VB 的了解仅限于打开 VB 编辑器。请帮忙。

编辑

以下是我正在尝试执行的操作的屏幕截图。我已经设置了一些条件格式来突出显示所有行,其中优先事项显示为高的。现在我需要所有这些记录(以及每次添加时具有“高”优先级的新记录)自动出现在其他记录的顶部。

Excel 屏幕截图

答案1

  1. 启用表自动过滤。

  2. 为状态列设置条件格式,用一些令人愉快的背景颜色标记高值。

  3. 将以下代码插入到工作表模块中。根据需要在代码中编辑列号、标题单元格地址和背景颜色值。

    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 代码非常令人生畏。

相关内容